jackson 问题定位

问题背景:

云计算Pass平台版本升级,导致引用的jackson的包直接由1.*升级为2.* 。在版本1.*中对于字段名与实际json不符的直接忽略了,而在2.*中则会报错。诸如此类,有较大差异,需要一一排查


 

一、配置maven依赖

1
2
3
4
5
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.9.5</version>
</dependency> 

 

https://mvnrepository.com

 

二、测试类

 

复制代码
 1 package com.example.myspring.transfer;
 2 
 3 import com.example.myspring.App;
 4 import com.fasterxml.jackson.core.JsonProcessingException;
 5 import com.fasterxml.jackson.databind.ObjectMapper;
 6 import org.junit.Test;
 7 
 8 import java.io.IOException;
 9 import java.util.Arrays;
10 import java.util.HashMap;
11 import java.util.Map;
12 
13 public class JacksonTest {
14 
15     private ObjectMapper objectMapper = new ObjectMapper();
16 
17     Map map = new HashMap();
18 
19     @Test
20     public void toJsonTest1() throws JsonProcessingException {
21         // 多种类型可以先封装为Map
22         map.put("alibaba", new App());
23         map.put("tengxun", Arrays.asList("weixin", "wangzherongyao"));
24         map.put("hugh", null);
25         map.put("DOU", "DOU");
26         System.out.println(objectMapper.writeValueAsString(map));
27         // {"alibaba":{},"DOU":"DOU","tengxun":["weixin","wangzherongyao"],"hugh":null}
28     }
29 
30     @Test
31     public void toJsonTest2() throws IOException {
32         // 新加非类Stu属性six,且值为null,依然可以被识别
33         String likeStu = "{\"sto\":\"001\",\"name\":\"xx\", \"six\":null}";
34         Map<String, Object> mock = objectMapper.readValue(likeStu, Map.class); // {"sto":"001","name":"xx","six":null}
35         System.out.println(objectMapper.writeValueAsString(mock));
36     }
37 
38     public static class Stu{
39 
40         private String sto;
41         private String name;
42 
43         public Stu(String sto, String name) {
44             this.sto = sto;
45             this.name = name;
46         }
47 
48         public String getSto() {
49             return sto;
50         }
51 
52         public void setSto(String sto) {
53             this.sto = sto;
54         }
55 
56         public String getName() {
57             return name;
58         }
59 
60         public void setName(String name) {
61             this.name = name;
62         }
63     }
64 }
复制代码

 

测试结果:

(1)未能复现项目中报错,推断与版本号有关联

(2)2.9.5  版本可以解析出以上结果;但是切换到 2.7.0 或者 以下版本,又报不同的错

 

三、总结

不同版本的jackson存在较大差异,坑较多

 

【参考】https://www.jianshu.com/p/4bd355715419

posted @   hugh.zm  阅读(179)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥
点击右上角即可分享
微信分享提示