项目引入 jackson-dataformat-xml 后 RestTemplate 序列化的 JSON 异常问题分析

Posted 毕小宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目引入 jackson-dataformat-xml 后 RestTemplate 序列化的 JSON 异常问题分析相关的知识,希望对你有一定的参考价值。

背景

项目打包时,为了减少部署包的大小,抽取公共依赖 jar 到一个公共目录。有一个模块使用了 RestTemplate 调用其他模块的服务,使用外部依赖包后,postForObject 返回的 JOSN 格数据不正常主要表现为:

  1. 布尔类型的的字段被解析成字符串了。
  2. 数组格式的数据,解析结果又潜套了一层:

    这是怎么回事儿呢?

问题分析

原因出在使用外部公共依赖包上面,用自身应用的依赖包没问题,用到整个项目公共目录包就错了。

分析问题出在 RestTemplate 的 JSON 转换上面,对比 jackson 依赖包,发现公共目录多了一个 jackson-dataformat-xml,把它挪出去后,这个项目的 RestTemplate 调用就正常了。

诡异的是,其他还有几个模块都通过外部依赖的方式引入了它,但是没有出现问题,因为服务调用使用的是 Feign 。

启示录

微服务应用实践过程中,依赖包过多、过大是个问题,想要精简依赖,抽取公共部分,不好抽取。最偷懒的办法是,将项目中所有模块的依赖包都放到一个目录中。但是容易带来其他问题:

  1. 依赖包版本不统一,需要通过父级工程统一版本。
  2. 有些配置包引入后,模块缺配置的,需要单独放一个目录,比如:spring-security-config;还有本文碰到的 spring-security-config 。

以上是关于项目引入 jackson-dataformat-xml 后 RestTemplate 序列化的 JSON 异常问题分析的主要内容,如果未能解决你的问题,请参考以下文章

求教java maven项目打包引入的问题,求大神解答

被引入的maven项目的class找不到

如何在Maven项目中引入自己的jar包

react 项目搭建后 打包 引入图片的问题

Vue项目中引入第三方已做好的H5游戏

idea创建javaproject项目,引入jar包并打包