jackson使用问题:mapper.readValue()将JSON字符串转反序列化为对象失败或异常
问题根源:转化目标实体类的属性要与被转JSON字符串总的字段 一 一对应!字符串里可以少字段,但绝对不能多字段。
先附上我这段出现了问题的源码:
// 1.接收并转化相应的参数。需要在pom.xml中引入jackson-databind这个包
String shopStr = HttpServletRequestUtil.getString(request, "shopStr");
ObjectMapper mapper = new ObjectMapper();
Shop shop = null;
try {
// 将前端接收来的一些String的信息,转换为Shop实体类
shop = mapper.readValue(shopStr, Shop.class);
} catch (Exception e) {
modelMap.put("success", false);
modelMap.put("errMsg", e.getMessage());
return modelMap;
}
开始这里跑得时候也不报错,但就是跑不通,就用debug断点一句一句查看,发现问题就出在了
shop = mapper.readValue(shopStr, Shop.class);这一句上。
网上搜索了若干方法都没有发现问题所在,然后阅读文档才发现有这样一个参数设置:
//设置输入时忽略JSON字符串中存在而Java对象实际没有的属性
mapper.getDeserializationConfig().set(
org.codehaus.jackson.map.DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
然后我就想,是不是我前端发送数据的时候塞错数据了?(PS:不要着急乱添加上面这个设置,原因下面会说)
于是又用断点测了下值(如下图):

然后去跟目标实体类对了下字段。
发现这里shopStr里并没有多出没有字段,那没道理跑不通啊,于是再仔细一看! 发现是没有多字段,但是 = =

实体类里这个属性为shopCategory 而我测试出来shopStr里的这个字段我拼成了shopCatrgory。

然后去js里看了下代码,果不其然。一个字母写错了。

我是真真的把自己服哈了,归根结底,居然是这种低级错误导致的。
前面说到的不要乱添加上面的设置原因就是,如果你也跟我一样是因为打错字母导致多了一个字段的,那么你就算添加了上面的那个设置,你在后面用值时,也会发现取不到你想要用的值,
而且你添加了上面设置,是不报错了,但是会导致问题更不好找,就好比我添加了以后,在取转化后shop对象里的shopCategory时,会是NULL。那你再想找到NULL原因,估计就很困难了。
jackson使用问题:mapper.readValue()将JSON字符串转反序列化为对象失败或异常的更多相关文章
- 使用jackson来进行数组格式的json字符串转换成List。
有一个字符串如下.如下,也是通过jackson把list转换成的json字符串,我想把它转过来,看网上的内容都不尽人如意,都是片断的内容.估计只有写的知道怎么使用,所以就直接看了jackson的官网, ...
- js中json字符串转成js对象
json字符串转成js对象我所知的方法有2种: //json字符串转换成json对象 var str_json = "{name:'liuchuan'}"; //json字符串 / ...
- C# 后台解析json,简单方法 字符串序列化为对象,取值
如果后台是一个JSON的字符串格式如下: string str = "{\"Success\":true,\"Msg\":\"成功!\&qu ...
- js将form表单序列化[json字符串、数组、对象]
1.序列化为字符串 $("#Form").serialize();//name=zhangsan&sex=1&age=20 2.序列化为数组 var formD ...
- Json序列化为对象方法
/// <summary>/// json 序列化为对象/// </summary>/// <typeparam name="T">对象类型&l ...
- 使用Jackson解析首字母大写的json字符串
Jackson在解析返回的json字符串时始终报错,纠结很久之后才找到原因,原来是是由于json字符串中的字母都是首字母大写,导致jackson找不到相应的KEY. 在项目中经常使用从服务器获取的数据 ...
- 将String类型的json字符串转换成java对象
1,import com.fasterxml.jackson.databind.ObjectMapper; ObjectMapper mapper = new ObjectMapper(); Mycl ...
- json字符串转泛型集合对象
Dictionary<string, object> jd = js.Deserialize<Dictionary<string, object>>(item); ...
- [MVC_Json序列化]Json字符串反序列化成C#对象
上一篇中有Json序列化相关问题得到了解决. 那么结果集为Json串时,如何将Json串转成C#对象呢? 现举例说明: -现有如下字符串数据 string k = "{\"ring ...
随机推荐
- 性能优化——Android图片压缩与优化的几种方式
图片优化压缩方式大概可以分为以下几类:更换图片格式,质量压缩,采样率压缩,缩放压缩,调用jpeg压缩等1.设置图片格式Android目前常用的图片格式有png,jpeg和webp,png:无损压缩图片 ...
- 转载:linux同步时间信息
Linux - CentOS7上的时间同步 1. 时区的概念 1.1 时区简介 地球是自西向东自转,东边比西边先看到太阳,东边的时间也比西边的早.东边时刻与西边时刻的差值不仅要以时计,而且还要以分和秒 ...
- mybatis error
2018-08-02 14:01:18.021 WARN org.apache.catalina.loader.WebappClassLoaderBase Line:179 - The web app ...
- show engines 解释
文章转自https://mariadb.com/kb/en/library/show-engines/#description 1)transaction 是否支持事务 2)XA 事务旨在允许分布式事 ...
- 1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(视频总揽和功能演示)
主要实现的功能 其它视频和资料稍候再补充上 我先写后面的文章 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(安装数据库,数据库简单说明)
- git冲突Please move or remove them before you can merge
解决Git冲突造成的Please move or remove them before you can merge git clean -d -fx ""其中x -----删除忽略 ...
- vue 2.0多页面开发
1.为项目添加多个入口 找到\build\webpack.base.conf.js文件: module.exports = { //..., //vue的多页面开发:应用程序可以存在多个入口 entr ...
- 在Bootstrap开发中解决Tab标签页切换图表显示问题
在做响应式页面的时候,往往需要考虑更多尺寸设备的界面兼容性,一般不能写死像素,以便能够使得界面元素能够根据设备的不同进行动态调整,但往往有时候还是碰到一些问题,如Tab标签第一页面正常显示,但是切换其 ...
- Bean笔记
为什么需要Bean , 因为 Aop 需要. 顺序 InstantiationAwareBeanPostProcessor , BeanPostProcessor 每个Bean都会执行这两个组件的相关 ...
- quartz获取缓存中所有运行中的Job
原文地址:https://blog.csdn.net/zzm8421/article/details/77769203 Quartz 2.1.5: public static void getAllJ ...