在做接口对接时,遇到一个问题,请求报文中存在一个list,(postman)格式如下:
"reqBody": {
"activityType": "2",
"endDate": "2020-09-26",
"merchantId": "5313e02e36034e22abbcda51be8d8645",
"startDate": "2019-09-27",
"list": [
{
"productId": "1e14a7a24af44ecea1ec50c102bf219b",
"productSecDiscount": 1
},
{
"productId": "1e14a7a24af44ecea1ec50c102bf219b",
"productSecDiscount": 1
}
]
}
因为公司系统使用了自定义的拦截器,导致不能使用@RequestBody直接接收list中的内容,只能使用string收list。
那问题来了,前台接收到的字符串格式如下:
“[
{productId=02e357356e2a4e0388a7f0cb7e327996, productSecDiscount=7.0},
{productId=311bc5df8d3841e983ce2f4ab9f2426d, productSecDiscount=8.0}
]”
这个字符串并不是标准的json串,但是格式却还算标准。
System.out.println("打印map");
List<Map<String,String>> list = new ArrayList<>();
Map<String,String> map = new HashMap<>();
map.put("name","zhangsan");
map.put("age","22");
list.add(map);
Map<String,String> map1 = new HashMap<>();
map1.put("name1","zhangsan");
map1.put("age1","22");
list.add(map1);
System.out.println(list.toString());
输出:
打印map
[{name=zhangsan, age=22}, {name1=zhangsan, age1=22}]
使用Gson进行转换
“[{name=zhangsan, age=22}, {name1=zhangsan, age1=22}]”
Gson gson = new Gson();
List<MarketActivityAddDetail> list =
gson.fromJson(marketActityVo.getList(),
new TypeToken<List<MarketActivityAddDetail>>() {}.getType());
因为之前直接把字符串当做了json串处理,浪费了不少时间。要善于发现数据的规律性,否则就只能使用字符串处理的方法进行分割和赋值了,那种方法肯定相当揉乱且低效,之前一直想用JSONArray或者JSONObject处理,但是没有成功,使用Gson处理的话就相当的高效。
本文关键参考 https://blog.csdn.net/hiqingtian/article/details/79448760