【objectMapper实体转换异常】 com.fasterxml.jackson.databind.exc.MismatchedInputException

 

大家好,我是烤鸭:

    采坑实录,想把json数据直接转成对象,其中有个属性是list<T>:

 

异常 1

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token

这个是获取到前端传递的参数:

String str = "{\"vv\":\"1.6.6\",\"authCode\":\"1111\",\"appid\":\"2\",\"apptype\":\"2\",\"userPhone\":\"11111111111\",\"latitude\":\"39.92183\",\"phoneInfo\":\"[{\"name\":\"于11\",\"mobile\":\"13111119019\"}]\",\"time\":\"1540970481\",\"longitude\":\"116.28041\"}";
ObjectMapper objectMapper = new ObjectMapper();
UserInfoRequest userInfoRequest = objectMapper.readValue(str, UserInfoRequest.class);
System.out.println(userInfoRequest);

报上面的错。UserInfoRequest 就不贴了,属性都是能对应上的。其中有个List<phoneInfo>属性。

查了一些资料。改成下面的代码:

String str = "{\"vv\":\"1.6.6\",\"authCode\":\"1111\",\"appid\":\"2\",\"apptype\":\"2\",\"userPhone\":\"11111111111\",\"latitude\":\"39.92183\",\"phoneInfo\":\"[{\"name\":\"于11\",\"mobile\":\"13111119019\"}]\",\"time\":\"1540970481\",\"longitude\":\"116.28041\"}";
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true) ;
objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
UserInfoRequest userInfoRequest = objectMapper.readValue(str, UserInfoRequest.class);
System.out.println(userInfoRequest);

就报异常2的错。

 

异常 2 

com.fasterxml.jackson.databind.exc.MismatchedInputException:

Cannot construct instance of `com.xxx.xxx` (although at least one Creator exists):

no String-argument constructor/factory method to deserialize from String value

因为自己测试的时候没有这个问题,就仔细对比了测试的时候str和前端的传值。

错误的:

String str = "{\"vv\":\"1.6.6\",\"authCode\":\"1111\",\"appid\":\"2\",\"apptype\":\"2\",\"userPhone\":\"11111111111\",\"latitude\":\"39.92183\",\"phoneInfo\":\"[{\"name\":\"于11\",\"mobile\":\"13111119019\"}]\",\"time\":\"1540970481\",\"longitude\":\"116.28041\"}";

正确的:

String str = "{\"vv\":\"1.6.6\",\"authCode\":\"1111\",\"appid\":\"2\",\"apptype\":\"2\",\"userPhone\":\"11111111111\",\"latitude\":\"39.92184\",\"phoneInfo\":[{\"name\":\"张三\",\"mobile\":\"15899996666\"},{\"name\":\"李四\",\"mobile\":\"138556688\"},{\"name\":\"王五\",\"mobile\":\"13855661118\"}],\"time\":\"1540969882\",\"longitude\":\"116.28033\"}";

 关键就在于 phoneInfo 后面跟的是字符串(""包括住的)还是 数组后者list对象。如果是字符串就报这个错了。

\"phoneInfo\":\"[{\"name\":\"于11\",\"mobile\":\"1311111019\"}]\"

简单一点的方式:​ 把你的字符串去这个网站看一下是否是标准json。下面两个图一眼就看出问题了。

http://www.bejson.com/ ​

 

总结:

知道问题在哪了,就好改了。因为获取到前端参数的是v=1&x=2&b=3这种形式的。

解析参数的时候,放到map<String,String>中,最后把map转成json字符串的格式。

没有考虑到前端传递的是list这种的格式,判断如果是 [ ]这种的话,就转成jsonArray放到map。

map的格式是 <String,Object>。代码如下:(pheader 是解密后的参数,v=1&x=2&b=3这种形式)

public static String getParam(String cipher)throws Exception{Map<String, Object> params = new HashMap<String,Object>();//解析参数String pheader = "";pheader = AESUtil.decrypt(PpsConfig.getString("appkey"), cipher);String[] pArr = pheader.split("&");for (int i = 0; i < pArr.length; i++) {String[] tmp = pArr[i].split("=");if (tmp.length == 2) {//说明是数组if(tmp[1].startsWith("[")){JSONArray array = JSONArray.parseArray(tmp[1]);params.put(tmp[0], array);}else {params.put(tmp[0], tmp[1]);}}else{params.put(tmp[0], "");}}return JSONObject.toJSONString(params);}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[css] 什么是脱离文档流?有什么办法可以让元素脱离标准的文档流?

[css] 什么是脱离文档流&#xff1f;有什么办法可以让元素脱离标准的文档流&#xff1f; 文档流就是指元素在 HTML 文档中位置顺序决定排布的过程。HTML 元素有块级元素和行内元素&#xff0c;块级元素一个占一行&#xff0c;行内元素在一行内依次排布。整体元素从上到下的排布…

解决 org.apache.hadoop.io.nativeio.NativeIO$POSIX.stat异常

原因是我的maven使用的hadoop版本是3.1.2&#xff0c; 但是系统环境变量配置的hadoop的版本是3.0.0&#xff0c; 所以造成这个异常。 解决方案&#xff1a;将两个版本改成一致&#xff0c;如果修改的是系统环境变量&#xff0c;请重启电脑。

[Leetcode 376]摇摆序列 Wiggle Subsequence

【题目】 A sequence of numbers is called a wiggle sequence if the differences between successive numbers strictly alternate between positive and negative. The first difference (if one exists) may be either positive or negative. A sequence with fewer than t…

java 实现 常见排序算法(三)快速排序

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下基础排序算法之快速排序。快速排序是内部排序&#xff08;基于比较排序&#xff09;中最好的比较算法。 1. 快速排序&#xff1a; 原理&#xff1a;在要排的数&#xff08;比如数组A&#xff09;中选择一个中心值k…

[css] 请问background-attachmentn属性有什么用途?

[css] 请问background-attachmentn属性有什么用途&#xff1f; background-attachment: fixed / scroll / local&#xff1a; 设置背景图像是否固定或者随着页面的其余部分滚动。fixed: 背景图片不会随着页面的滚动而滚动。scroll: 背景图片随着页面的滚动而滚动&#xff0c;这…

解决org.apache.hadoop.io.nativeio.NativeIOException: 当文件已存在时,无法创建该文件。

Hadoop在本地运行的时候总是出现这个异常&#xff0c;虽然这个异常不影响代码运行&#xff0c;但是看着很不爽 1&#xff0c;找到log4j.properties文件&#xff0c;查看log4j.rootLogger&#xff0c;但是却没有debug log4j.rootLogger info,stdout2&#xff0c;查看pom.xm…

两台TP-LINK路由器串联

TP-LINK的交换机LAN口连接电脑&#xff0c;设置交换机IP为192.168.2.1&#xff0c;为以后方便管理不设置自动获取IP地址&#xff0c;不设置DHCPLAN口连接路由器网线&#xff0c;不是WAN口其他电脑也连接LAN口&#xff0c;即可上网 https://www.192ly.com/qiu-zhu/two-routers-c…

[css] 移动页面底部工具条有3个图标,如何平分?在设置边框后最后一个图标掉下去了怎么办?

[css] 移动页面底部工具条有3个图标&#xff0c;如何平分&#xff1f;在设置边框后最后一个图标掉下去了怎么办&#xff1f; flex-wrap nowrap, 一般flex默认就是nowrap white-space:nowrap是针对行内元素设置的,默认为normal个人简介 我是歌谣&#xff0c;欢迎和大家一起交流…

springboot websocket

大家好&#xff0c;我是烤鸭&#xff1a; 今天想分享一下springbootwebsocket。 之前接到一个需求&#xff0c;需要在页面监听后台的数据&#xff08;输入邮箱后&#xff0c;需要用户打开邮箱&#xff0c;页面监听用户是否点击激活邮件&#xff09;。之前的实现方式&#xff0c…

[网络开发]同步与线程安全方案

方案&#xff1a;synchronized,volatileCAS&#xff08;compareAndSet&#xff09;,atomic包&#xff0c;Lock接口 java同步和IO同步的对比&#xff1a; 都是同步异步的方案问题&#xff0c;一个操作的是java代码(实际是堆和方法区)&#xff0c;一个操作的是TCP RecvBuffer而已…

[css] 说下你对background-size的理解,它有什么运用场景?

[css] 说下你对background-size的理解&#xff0c;它有什么运用场景&#xff1f; 设置背景图的大小&#xff0c;一般用来设置背景图的大小。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 …

idea的plugins无法使用marketplace plugins are not loaded

idea64.exe.vmoptions删除-Djsse.enableSNIExtensionfalse 再次重启后就可以正常使用plugins&#xff01;&#xff01;&#xff01;

redis实践的一点思路,关于支付回调

大家好&#xff0c;我是烤鸭: 如果作为第三方支付平台&#xff0c;需要通知调用方付款成功。但是出现通知失败的情况&#xff0c;怎么处理。 支付宝的异步通知&#xff0c;每个订单的异步通知实行分频率发送:15s 3m 10m 30m 30m 1h 2h 6h 15h。 如果没有收到success&a…

断电启动+智能插座 七彩虹B460主板实现电脑远程开机

BIOS设置操作步骤&#xff1a; 1&#xff0c;开机按F2进入BIOS系统&#xff08;小提示&#xff1a;不同的主板按键不一样&#xff0c;开机应该有提示&#xff09; 2&#xff0c;高级模式 > 高级 > 电源管理设置 > 交流电源恢复后处理 > 选择“开机” 3&#xff0c…

[css] 如何自定义radio按钮的样式

[css] 如何自定义radio按钮的样式 选择器 input[type“radio”]现在几乎不用原生的radio&#xff0c;一是原生样式改成设计稿的样子太浪费时间&#xff0c;二是不同浏览器对于原生radio的展示还不一样。基于状态驱动的思想&#xff0c;用自定义按钮或其他元素来替代radio&…

myabtis 数字+逗号 传参问题 $和#

大家好&#xff0c;我是烤鸭&#xff1a; 遇到一个maybatis传参的问题。 如果传参是数字逗号的形式&#xff0c;比如1,2,3,4,5。 问题复现&#xff1a; 项目中查询sql和navicat查询sql结果不一致。 1 项目中&#xff1a; 如图所示&#xff0c;查到一条数据。 可以看到…

SpringBoot上传文件到本服务器 目录与jar包同级

前言 看标题好像很简单的样子&#xff0c;但是针对使用jar包发布SpringBoot项目就不一样了。 当你使用tomcat发布项目的时候&#xff0c;上传文件存放会变得非常简单&#xff0c;因为你可以随意操作项目路径下的资源。但是当你使用SpringBoot的jar包发布项目的时候&#xff0c;…

JS判断是否是科学计算结果并处理

var re 505899.24- 495991.61- 9907.63;var test1 /\d(?:.(\d*))?e([-]\d)/.test(re);alert("是否是科学计算结果:"test1);var test2 re.toFixed(10)-0;alert("处理后的结果&#xff1a;" test2 );

[css] css怎样使每个字符宽度一样?

[css] css怎样使每个字符宽度一样&#xff1f; 控制字符间距&#xff1a;letter-spacing:1em;[em,px,rem]个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe

大家好&#xff0c;我是烤鸭&#xff1a; 又是采坑实录。 异常如下&#xff1a; org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipeat org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:356)at org.ap…