遇到问题:控制层中,同时传递list<对象>和对象(Map)参数时,请求如何设置?
传递参数如:List<User>、Department、Map同时传递。
两种解决思路:
一、将这多个参数封装成对象形式:
@Data
public class MergeVo{
private List<User> userList;
private Department dept;
private Map map;
}
然后将MergeVo以参数形式传递。
@PostMapping("/request")
public void complexRequest(@RequestBody MergeVo){
......
}
二、以JSONObject 的形式做参数传递:
如果不想封装对象形式传递,可以选择JSONObject对象形式传递,但是之后,需要做JSON转换对象任务,具体如下:
@PostMapping("/request")
public void complexRequest(@RequestBody JSONObject jsonObject){
//首先获取dept,并做字符转化
String deptStr = JSON.toJSONString(jsonObject.get("dept"));
//利用alibaba fastjson转换成对象,这里不能用jsonObject.toJavaObject()方法
Department dept = JSONObject.parseObject(deptStr,Department.class);
}
上述代码中,List可以强转成功,但是List<User>里面的User就不能强转,Map也不能强转。
如果强行转换,或者使用jsongObject.toJavaObject()方法,会出现异常情况,如:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX