背景介绍

在做接口对接时,遇到一个问题,请求报文中存在一个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

list字符串转对象listT或者字符串转map相关推荐

  1. 冒泡排序和字符串(String)对象及处理字符串的方法

    冒泡排序 第一种方法var times=0;var arr=[12,3,6,9,77,37];for(var i=0;i<arr.length-1;i++){ //控制比较的行数for (var ...

  2. html对象转成字符串,4.对象转化为字符串

    4_对象转化为字符串 14:56 思维导图.png 序列化,指将 JavaScript 值转化为 JSON 字符串的过程. JSON.stringify() 能够将 JavaScript 值转换成 J ...

  3. Json对象和Json字符串

    JSON对象 有时候在做项目的时候时常将这两个概念弄混淆,尤其是在使用springmvc的时候,后台@RequestBody接受的是一个json格式的字符串,一定是一个字符串.  先介绍一下json对 ...

  4. MySQL 学习笔记(12)— 数据类型(定长字符、变长字符、字符串大对象、数字类型、日期时间类型、二进制类型)

    MySQL 常见的数据类型有字符串类型.数字类型.时间类型.二进制类型.具体的分类如下图: 1. 字符串类型 字符串类型用于存储字符和字符串数据,主要包含三种具体的类型:定长字符串.变长字符串以及字符 ...

  5. JavaScript对象、JSON对象、JSON字符串的区别

    一.首先看下什么是JSON JSON:JavaScript Object Natation,JavaScript对象的表现形式,已经发展成一种轻量级的数据交换格式. JavaScript对象的表现形式 ...

  6. Json字符串和对象相互转换

    文章目录 1.JsonUtil 工具类 把对象转换为json字符串 把json字符串转换为对象 把json字符串转换为List集合 2.Gson 把对象转换为json字符串 把json字符串转换为对象 ...

  7. java处理json字符串_常见java对象转换为json字符串处理!!!

    1.JSON简介 1. 概念: JavaScript Object NotationJavaScript对象表示法 Person p = new Person(); p.setName("张 ...

  8. java 嵌套对象转xml_Gson对Java嵌套对象和JSON字符串之间的转换 | 学步园

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性.近几年来已经和XML一样成为C/S架构中广泛采用的数据格式.有关JSON的更多知识, ...

  9. json对象和json字符串转换方法

    在WEB数据传输过程中,json是以文本,即字符串的轻量级形式传递的,而客户端一般用JS操作的是接收到的JSON对象,所以,JSON对象和JSON字符串之间的相互转换.JSON数据的解析是关键. 先明 ...

最新文章

  1. SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可回滚)
  2. wireshark合并多个文件_小技巧:快速合并多个excel文件(收藏版)
  3. python日期加减源码_Python 时间序列的时间延迟计算
  4. windows API 实现截图
  5. Quartz框架基于Calendar的排除规则
  6. docker下gitlab安装配置使用(完整版)
  7. 2019.08.29定时器以及轮播图
  8. class属性表种类集合,以及字段详解
  9. 大文件上传下载实现思路,分片、断点续传代码实现,以及webUpload组件
  10. java批量控制安卓手机_安卓手机屏幕投射到电脑以及一台电脑控制多台手机技术原理浅析...
  11. php 汇率接口,PHP 对交易对汇率 转换
  12. ps.execute()不能当作执行结果反馈,需要用getResultSet或getUpdateCount
  13. PS 把两张图片融合为一张
  14. ACE编辑器ace-editor笔记
  15. win10下VMware15安装centos7详细步骤及遇到的问题
  16. 2023北京老博会,CISSE中国国际养老服务业博览会
  17. C语言检测是否加入一个QQ群,判断登录的QQ是否已经加入指定的QQ群
  18. 计算机网络-常用英文简写大全
  19. 微型计算机原理与接口技术(周荷琴 冯焕清)第六版 课后习题答案 第一章(部分答案)
  20. 兔老大的系统设计(二)定时系统(延时队列)

热门文章

  1. HiFi发烧是什么意思?
  2. 第八阶段:Linux运维-03Docker入门到精通
  3. 评奖助学金、保研的这段日子
  4. 京东精益敏捷教练分享:敏捷助力产品创新
  5. oracle 行转列字符拼接,oracle 行转列,用特殊符号拼接
  6. GeoServer源码解析和扩展 (三)结构篇
  7. MySQL数据库——连接查询
  8. 网络对抗作业——黄晨
  9. 用PuLP求解混合0-1整数规划问题
  10. 百度智能小程序击中微信软肋:流量要多更要精