java spring框架后台接收List对象参数以及各种接收参数方法
因为最近项目有这个需求,开始按照自己的方法试了几次都不成功,最后在网上查找了半天,算是基本理清了原委,当然时间仓促,可能有不准确的地方,如果博友有更好的方法,欢迎留言交流.
直接上结论:
只能用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博客