单个参数或者几个参数接收比较好处理,直接使用@RequestParam注解即可,或者不用注解都可以接收。而复杂的json格式就稍微有点麻烦,有时注解用的不对,会花费大量时间去试验。
例如要传递的json格式如下所示:
{
"list": [
{
"reportId": 1,
"reportName": "报告1",
"completeDate": "2019-07-24 23:12:39"
},
{
"reportId": 2,
"reportName": "报告2",
"completeDate": "2019-07-25 23:12:39"
}
],
"id": "2"
}
java 后台要接收类似复杂的json格式字符串,有两种思路可供参考
第一种:在后台定义两个实体类
第二种:直接用map接收,再转换
一、第一种方式
- 先创建两个类,一个Report实体。一个接收类,里面属性包含list
public class Report{
private Integer reportId;
private String reportName;
private Date completeDate;
...
}
public class RequestParam{
private String id;
private List<Report> list;
...
}
- controller层直接用注解@RequestBody接收即可
@RequestMapping(value = "/report/list")
@ResponseBody
public Object reportList(@RequestBody RequestParam param) {
...
}
二、第二种方式
- 定义一个实体
public class Report{
private Integer reportId;
private String reportName;
private Date completeDate;
...
}
-
先用map接收,再利用
fastjson
转化json字符串为对象。因为list中包含着对象,所以需要先将json字符串转化为List,再遍历List将其每一个都转化为Report对象。
@RequestMapping(value = "/report/list")
@ResponseBody
public Object reportList(@RequestBody Map<String,Object> map) {
// 直接拿到外层id
String id= map.get("id").toString();
// 利用fastjson将json串转化为对象
List list = JSONObject.parseObject(map.get("list").toString(),List.class);
List<Report> reportList = new ArrayList<>();
for (int i = 0; i < list.size(); i++){
reportList.add(JSONObject.parseObject(list.get(i).toString(),Report.class));
}
...
}
Tips:
在前端ajax传递时记得
contentType
属性设置为:
"application/json"
版权声明:本文为weixin_45237517原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。