jackson 问题定位
问题背景:
云计算Pass平台版本升级,导致引用的jackson的包直接由1.*升级为2.* 。在版本1.*中对于字段名与实际json不符的直接忽略了,而在2.*中则会报错。诸如此类,有较大差异,需要一一排查
一、配置maven依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.5</version>
</dependency>
https://mvnrepository.com
二、测试类
package com.example.myspring.transfer; import com.example.myspring.App;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test; import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map; public class JacksonTest { private ObjectMapper objectMapper = new ObjectMapper(); Map map = new HashMap(); @Test
public void toJsonTest1() throws JsonProcessingException {
// 多种类型可以先封装为Map
map.put("alibaba", new App());
map.put("tengxun", Arrays.asList("weixin", "wangzherongyao"));
map.put("hugh", null);
map.put("DOU", "DOU");
System.out.println(objectMapper.writeValueAsString(map));
// {"alibaba":{},"DOU":"DOU","tengxun":["weixin","wangzherongyao"],"hugh":null}
} @Test
public void toJsonTest2() throws IOException {
// 新加非类Stu属性six,且值为null,依然可以被识别
String likeStu = "{\"sto\":\"001\",\"name\":\"xx\", \"six\":null}";
Map<String, Object> mock = objectMapper.readValue(likeStu, Map.class); // {"sto":"001","name":"xx","six":null}
System.out.println(objectMapper.writeValueAsString(mock));
} public static class Stu{ private String sto;
private String name; public Stu(String sto, String name) {
this.sto = sto;
this.name = name;
} public String getSto() {
return sto;
} public void setSto(String sto) {
this.sto = sto;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
}
测试结果:
(1)未能复现项目中报错,推断与版本号有关联
(2)2.9.5 版本可以解析出以上结果;但是切换到 2.7.0 或者 以下版本,又报不同的错
三、总结
不同版本的jackson存在较大差异,坑较多
【参考】https://www.jianshu.com/p/4bd355715419
jackson 问题定位的更多相关文章
- JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码
本文是<JVM 性能调优实战之:一次系统性能瓶颈的寻找过程> 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 提升到 20 (提升了 7 倍) ...
- Lucene和jackson冲突
今天在使用lucene的时候,想直接在Controller中返回json对象,于是在Spring中配置了JackSon的converter: <bean id="jacksonMess ...
- 【SpringMVC】从Fastjson迁移到Jackson,以及对技术选型的反思
为什么要换掉fastjson 直接原因是fastjson无法支持注解形式的自定义序列化和反序列化,虽然其Github上的Wiki上说明是支持的.但是实测结果表明:Test类的序列化被fastjson的 ...
- 深入理解Spring Redis的使用 (七)、Spring Redis 使用 jackson序列化 以及 BaseDao代码
之前在介绍Spring Redis进行存储的时候,都是通过RedisTemplate中的defaultSerializer,即JdkSerializationRedisSerializer.通过Jdk ...
- jackson用法
ObjectMapper mapper=new ObjectMapper(); //3.调用mapper的writeValueAsString()方法把一个对象或集合转为json字符串 Custome ...
- JSON解析工具——Jackson的简单使用
什么是Jackson 可以轻松实现Java对象与JSON字符串的转换 准备工作:导包 Jackson的jar all下载地址:http://jackson.codehaus.org/1.7.6/jac ...
- 使用jackson工具类把对象或集合转为JSON格式
jackson使用方法: 1.加入jar包: jackson-annotations-2.2.2.jar jackson-core-2.2.2.jar jackson-databind-2.2.2.j ...
- 使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码 (jvm性能调优)
技术交流群:233513714 本文是<JVM 性能调优实战之:一次系统性能瓶颈的寻找过程> 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 ...
- 再爆安全漏洞,这次轮到Jackson了,竟由阿里云上报
冤冤相报何时了,得饶人处且饶人.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[ ...
随机推荐
- 《YC创业营:硅谷顶级创业孵化器如何改变世界》:YC2011批量天使投资记录 三星推荐
这个YC创业营是一个硅谷的天使投资基金,每年两次批量投资创业公司.本书说的是2011年YC批量选择了64个创业团队,让他们集中到硅谷办公3个月,给他们创业指导,帮他们找A轮投资. YC创始人偏爱25岁 ...
- 【Leetcode周赛】从contest-111开始。(一般是10个contest写一篇文章)
Contest 111 (题号941-944)(2019年1月19日,补充题解,主要是943题) 链接:https://leetcode.com/contest/weekly-contest-111 ...
- BZOJ2695 保护古迹
非常带劲之计算几何 写的头晕= = 就是平面图转对偶图然后最小割 由于p非常小我们枚举所有保护状态然后割一下 建图真的烦 就是把区域划分出来看一下每一个古迹点是否被小区域包含[好像也可以写点定位] 然 ...
- 51nod 1490: 多重游戏(树上博弈)
题目链接 该题实质上是一个树上博弈的问题.要定义四种状态——2先手必胜 1先手必败 3可输可赢 0不能控制 叶子结点为先手必败态: 若某结点的所有儿子都是先手必败态,则该结点为先手必胜态: 若某结点的 ...
- 网络体系应用层之DNS系统
1.概述 域名系统 DNS 是因特网使用的命名系统,用来把便于人们使用的机器名字(即域名)转换为 ip 地址. 用户与因特网上某个主机通信时,必须要知道对方的 ip 地址,然而用户很难记住长达32位二 ...
- Hive if和coalesce函数
链接:https://blog.csdn.net/qq_26442553/article/details/79465417 if 函数举例:
- mysql 查询结果增加自动递增的一列,排名,排序
mysql中有时候需要对查询的结果排序,比如根据成绩获取排名信息等,需要增加一个自增的列,也就是排名信息 ; as sortid FROM a; 如果不支持写两条sql,可以用以下写法合成一条sq ...
- oracle 远程访问
oracle 本机能连外部访问不了 新装的 oracle 数据库经常会出现本地计算机能连接,但是局域网内的其他计算机不能连接的问题,如果出现此问题可以参考此文来解决. 本文中用的数据库版本为 Orac ...
- 使用SSH方式实现Git远程连接GitHub/gitlab
参照: https://blog.csdn.net/wuli_smbug/article/details/81480162
- [python面试题] 什么是单例,单例有什么用,业务场景是什么
单例概念: 单例是一个特殊的类,这个类只能创建一次实例,例子如下: 1.a = Std(name='leo'), b = Std(name='jack'),两者的指向都是name=‘leo’的对象: ...