list字符串转对象list<T>或者字符串转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. 验证
    请求参数:
    在这里插入图片描述
    处理结果:
    在这里插入图片描述
    成功赋值,验证通过
总结

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

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值