一、基础学习

hello本期继续以实际案例的形式分享Java基础之 Java后台接受数组和集合的案例,分享给初学者
在这里插入图片描述

首先我们模拟创建一个user的实例

/**
 * @program: demo
 * @description: 普通用户
 * @author: 辰兮要努力
 * @create: 2021-10-03 11:04
 */
@Data
public class User {

    private String id;
    private String name;
    private Integer age;

}

创建一个公共的返回值的帮助类

import lombok.Data;

/**
 * @program: demo
 * @description: 封装公共的返回值
 * @author: 辰兮要努力
 * @create: 2021-10-03 11:05
 */
@Data
public class Result<T> {

    private static final long serialVersionUID = 1L;

    private Integer code;
    private String msg;
    private T data;

    public static Result fail() {
        Result Result = new Result();
        Result.setCode(1);
        Result.setMsg("服务器错误!!!");
        return Result;
    }

    public static Result fail(String msg) {
        Result Result = new Result();
        Result.setCode(1);
        Result.setMsg(msg);
        return Result;
    }

    public static <T> Result success(T data) {
        Result Result = new Result();
        Result.setCode(0);
        Result.setData(data);
        return Result;
    }

    public static Result success() {
        Result Result = new Result();
        Result.setCode(0);
        Result.setMsg("操作成功!");
        Result.setData("success");
        return Result;
    }


}

业务场景一:前端传对象集合后台如何接受?

[
	{
	   "id":"1",
	   "name":"辰兮",
	   "age":"22"
     },
	{
	   "id":"2",
	   "name":"辰兮要努力",
	   "age":"23"
     }
]

后台接受方式

@RequestBody List<User> userList

业务场景二:前端传数组后台如何接受?

["2021","2022"]

后台接受方式

@RequestBody List<String> list

业务场景二:前端在URL里面传id1,id2后台如何接受?@RequestParam或@PathVariable

前台可以直接URL中通过id1,id2的方式入参,后台直接通过数组或List的的方式来接收,作为动态sql的入参,使用动态sql的foreach语法:

    @ApiOperation("通过alarmId删除报警记录")
    @DeleteMapping("/delete/{alarmIds}")
    public Result delete(@ApiParam("报警记录id") @PathVariable Long[] alarmIds){
        return alarmRecordService.deleteAlarmRecordByIds(alarmIds);
    }

简单的写一个controller层模拟业务操作:重在查看入参

/**
 * @program: demo
 * @description: 前后端传值交互案例
 * @author: 辰兮要努力
 * @create: 2021-10-03 11:09
 */
@RestController
@RequestMapping("/user")
public class UserController {

    //打印日志
    private static final Logger logger = LoggerFactory.getLogger(UserController.class);

    /**
     * 前端传对象集合 后端用集合接
     * @param userList
     * @return
     */
    @PostMapping("/saveList")
    public Result saveUserList(@RequestBody List<User> userList) {

        logger.info("传入的参数是{}",userList);

        //模拟逻辑层做一个入参校验
        if (CollectionUtils.isEmpty(userList)){
            return Result.fail();
        }
        return Result.success();
    }

    /**
     * 业务场景:前端传入单独一个数组
     * @param list
     * @return
     */
    @PostMapping("/saveUserIds")
    public Result saveStrings(@RequestBody List<String> list) {

        logger.info("传入的参数是{}",list);
        //模拟逻辑层做一个入参校验
        if (CollectionUtils.isEmpty(list)){
            return Result.fail();
        }
        return Result.success();
    }

}

业务场景一:前端传对象的集合后端就用对应的list接受即可
在这里插入图片描述
业务场景二:前端传对应的数组后台接受
在这里插入图片描述

来看看控制台打印的参数
在这里插入图片描述
使用如上的方法即可成功接受前端传入的集合或者数组


二、进阶学习

你是否遇到过这样的问题,就是前端除了传一个集合外,还要传一个字符串或者数字等属性?

业务场景:传入的集合代表要操作的数据,传入的字符串,字符串/数字 不同 走不同的业务逻辑等
请添加图片描述
入参案例如下

{
	"userList":[{"id ":"1","name":"辰兮","age":"22"},{"id":"2","name":"辰兮要努力","age":"23"}],
    "open":1
}

接受方式:创建一个对象接受

/**
 * @program: demo
 * @description: 用户对象接受类
 * @author: 辰兮要努力
 * @create: 2021-10-03 11:04
 */
@Data
public class UserVo {

    private List<User> userList;
    private Integer open;
}

实践案例如下

/**
 * @program: demo
 * @description: 前后端传值交互案例
 * @author: 辰兮要努力
 * @create: 2021-10-03 11:09
 */
@RestController
@RequestMapping("/user")
public class UserController {

    //打印日志
    private static final Logger logger = LoggerFactory.getLogger(UserController.class);

    /**
     * 业务场景:前端传一个数组➕一个字符串或者数字等
     * @param userVo
     * @return
     */
    @PostMapping("/saveUserVo")
    public Result saveUserVoList(@RequestBody UserVo userVo) {

        logger.info("传入的参数是{}",userVo);

        return Result.success();
    }
}

我们可以debug查看一下入参,很清晰的可以看到前端传入的参数
在这里插入图片描述

前后端传参,最重要的还是统一好对应的参数属性名称,传参方式等,提前确认好,开发效率会大幅提高

请添加图片描述
解答:前端除了传一个集合外,还要传一个字符串或者数字等属性,我们创建一个VO对象来接受即可解决如上的问题


📣推荐阅读

Java面试总结:点击进入 Java面试专栏 关注走一波

Java基础知识:点击进入 Java基础总结 关注走一波

Java项目专栏:点击进入 Java毕设专栏 关注走一波

山高水远,我们未来见……


非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤️ 分享👥 留言💬thanks!!!

愿你们奔赴在自己的热爱里!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐