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

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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值