list字符串转对象list或者字符串转map

背景介绍

在做接口对接时,遇到一个问题,请求报文中存在一个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串,但是格式却还算标准。

问题分析

  • 刚开始,并没有注意到,直接当成了json进行处理,导致各种报错,后来比对了一下,才发现不是标准的json串
  • 直接比较来看的话,是去掉了接收参数中的双引号,且将冒号换成了等号。其实这个就是List调用toString后的结果。
    下面是自己试验的一个小demo
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进行转换

  1. 确认字符串格式,需方括号进行包裹 [],如:
[{name=zhangsan, age=22}, {name1=zhangsan, age1=22}]
  1. 使用Gson进行转化,其中MarketActivityAddDetail是我的泛型对象,当然这里也可以换成map,间接的实现string和map之间的转换
		Gson gson = new Gson();
		List<MarketActivityAddDetail> list =
			gson.fromJson(marketActityVo.getList(), 
			new TypeToken<List<MarketActivityAddDetail>>() {}.getType());
  1. 验证
    请求参数:
    list字符串转对象list或者字符串转map_第1张图片
    处理结果:
    list字符串转对象list或者字符串转map_第2张图片
    成功赋值,验证通过

总结

因为之前直接把字符串当做了json串处理,浪费了不少时间。要善于发现数据的规律性,否则就只能使用字符串处理的方法进行分割和赋值了,那种方法肯定相当揉乱且低效,之前一直想用JSONArray或者JSONObject处理,但是没有成功,使用Gson处理的话就相当的高效。

本文关键参考 https://blog.csdn.net/hiqingtian/article/details/79448760

你可能感兴趣的:(JAVA)