痛点
在日常工作过程中 ,经常需要使用post方法去接受前端传来的数组.但由于一直没有系统性的梳理,导致总是遇到这样那样的问题,耽误时间.现在就把一些常用的场景记录下来,后续有新的发现,也在这个页面记下来.
一、application/json 的情况
使用json格式接收数据需要使用统一的注解Requestbody
1.直接由数组接收
@PostMapping ("/test")
public String demo(@RequestBody List<Integer> ids) {
log.info("{}",ids);
return JSONObject.toJSONString(ids);
}
2.对象接收的情况
与上述情况不同的是,这种情况接受,数组需要是对象的一个属性,此时传参,不能像上述那样简单,需要一个完成的json结构.
@PostMapping ("/test")
public String demo(@RequestBody Student student) {
log.info("{}",student);
return JSONObject.toJSONString(student);
}
public class Student {
private List<Integer> ids;
private String name;
}
参数
{"ids":[1,2,3,4,5],"name":"aka"}
二、表单传值
表单传值算是比较复杂,我也有很多不了解的
数组接受
@PostMapping ("/test")
public String demo(@RequestParam List<Integer> ids) {
log.info("{}",ids);
return JSONObject.toJSONString(ids);
}
这种方式仅限于逗号分隔的字符串,能自动转成数组
对象接收
@PostMapping ("/test")
public String demo(Student student) {
log.info("{}",student);
return JSONObject.toJSONString(student);
}
如果需要传递一个对象?其中一个属性是数组怎么办?
例如 需要接受对象数组
@PostMapping("/test2")
public String demo2(List<Student> students) {
log.info("{}", students);
return JSONObject.toJSONString(students);
}
public class Student {
private Integer studentNo;
private String name;
public Student(Integer studentNo, String name) {
this.studentNo = studentNo;
this.name = name;
}
}
错误结果
解决方式:包一层
包装对象如下
public class College {
private List<Student> students;
}
接口代码
@PostMapping("/test3")
public String demo3(College college) {
log.debug("{}", college);
return JSONObject.toJSONString(college);
}
此时便可以愉快的传递了
以上错误的方式应该会有解决方式,待我细细读一下源码再来补充下