jackson 问题定位
2024-09-05 05:02:28
问题背景:
云计算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
最新文章
- EBS提交请求出现REP-3000错误
- CSU 1660 K-Cycle(dfs判断无向图中是否存在长度为K的环)
- java中的数据结构 --- 集合
- js滚动加载插件
- Nginx的fastcgi_cache
- 【Hibernate 5】继承映射配置及多态查询
- 错误源:WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for &#39;jquery&#39;. Please add a ScriptResourceMapping named jquery(case-sensitive).
- linux定时器用法
- Business Analysis and Essential Competencies
- Python调用C/C++动态链接库的方法详解
- spring整合mybatis错误:Could not autowire field: com.kjczwl.ssm.service.ItemsService com.kjczwl.ssm.controller.ItemsController.itemsservice;
- vmware安装centOs操作系统配置网络的一系列问题
- 聊天机器人開發好消息!!DIALOGFLOW與微信的天作之合!!
- UDP学习总结
- 【转】使用windeployqt.exe进行依赖查找打包
- SpringMvc定时器任务
- iOS开发-- 设置UIButton的文字显示位置、字体的大小、字体的颜色
- 【大数据系列】windows下连接Linux环境开发
- java 内存深度解析
- 微信小程序教程系列
热门文章
- ActiveMQ修改连接的用户名密码
- qt opencv 视频分析
- Kotlin——关于字符串(String)常用操作汇总
- Flutter的flutter_calendar日曆的使用
- Es学习第七课, term、terms、match等基本查询语法
- 计蒜客NOIP模拟D1T2
- MVC模式设计的Web层框架初识
- 02.自定义banner、全局配置文件、@Value获取自定义配置、@ConfigurationProperties、profiles配置
- 10.VScode Debug——2019年12月12日
- 【leetcode】1018. Binary Prefix Divisible By 5