java spring框架后台接收List对象参数以及各种接收参数方法

Chobits / 2023-08-31 / 原文

因为最近项目有这个需求,开始按照自己的方法试了几次都不成功,最后在网上查找了半天,算是基本理清了原委,当然时间仓促,可能有不准确的地方,如果博友有更好的方法,欢迎留言交流.

直接上结论:

只能用JSON的方式传,有两种方法,不同之处在于是框架帮你转还是你自己转成对象

前提:要求前端请求头中contentType 类型 必须为 application/json

同时记得 要把js 对象转成字符串 作为参数,现在都是前后端分离,一般使用ajax,例如: 

$.ajax({
    url: "/sys/listUserRole",
    data: JSON.stringify(list),
    type: "post",
    contentType: "application/json",
    dataType: "json",
    success: function(data) {

    }
});

 

1.后端框架自动帮转,使用@RequestBody注解

@PostMapping(value = "saveList")
    
    public JR saveList(@RequestBody List<SalaryMatterCellSource> cellSources) {
        for (SalaryMatterCellSource salaryMatterCellSource : cellSources ){
                    if (salaryMatterCellSource.getIsNewRecord()) {
                        this.salaryMatterCellSourceService.save(salaryMatterCellSource);
                    } else {
                        SalaryMatterCellSource t = this.salaryMatterCellSourceService.get(salaryMatterCellSource.getId());
                        try {
                            BeanUtils.copy2Properties(salaryMatterCellSource, t);
                            this.salaryMatterCellSourceService.save(t);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }

        return ok("数据保存成功!");
    }

2.自己用String接收,然后用fastJson之类的工具转换,不再赘述

------------------------------------------------------------------------------------------

过程中踩的坑:

1.如果不指定,请求的content-type默是application/x-www-form-urlcoded编码,从名字上就可以看出这是处理form表单的,可以结合@RequestParam使用,有一个博主的文章更详细,给出链接:

SpringMVC之请求参数的获取方式 - 一灰灰Blog

Spring之RequestBody的使用姿势小结 - 掘金

2.其实严格说来,实现传List还有一种曲线的方法,就是新建一个Bean,然后将List放进去,这种适合于更复杂的情况,比如除了list还需要传mainId之类,或者传的参数以后可能要增加之类的,这样便不用修改接口.

 

其他参考文章:

目前为止全网最全的 SpringBoot 参数传递方案 - 知乎

Spring MVC 参数自动绑定List的解决方案 - xwayway的个人空间 - OSCHINA - 中文开源技术交流社区

SpringBoot同时接收单个对象和List<object>参数 - TandK - 博客园

spring boot传入list对象 springboot接收list对象_mob6454cc6e1f98的技术博客_51CTO博客

springmvc /springboot 接收List 入参_springboot 接收list参数_潇凝子潇的博客-CSDN博客