springmvc接收参数 json中同时包含普通参数和数组参数

  • Post author:
  • Post category:其他


单个参数或者几个参数接收比较好处理,直接使用@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接收,再转换



一、第一种方式
  1. 先创建两个类,一个Report实体。一个接收类,里面属性包含list
public class Report{
	private Integer reportId;
	private String reportName;
	private Date completeDate;
	...
}
public class RequestParam{
	private String id;
	private List<Report> list;
	...
}
  1. controller层直接用注解@RequestBody接收即可
@RequestMapping(value = "/report/list")
@ResponseBody
public Object reportList(@RequestBody RequestParam param) {
	...
}



二、第二种方式
  1. 定义一个实体
public class Report{
	private Integer reportId;
	private String reportName;
	private Date completeDate;
	...
}
  1. 先用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 版权协议,转载请附上原文出处链接和本声明。