问题描述
在使用dubbo中间件进行微服务开发的时候,使用了rest+json的方式(当当网的dubbox),当对象序列化和反序列化的时候,如果序列化的对象中拥有的属性在反序列化的对象中不存在,会报错,无法调用,在对象上加@JsonIgnoreProperties注解也不起作用的
问题发生的原因
- dubbo默认使用的json版本是fastjson 1.9的,在新版本的fastjson(2.+以后)中,两个版本的jar包的包名已经变更了,如果是加上注解忽略序列化中不存在的属性可以将1.9和2.0以后的两个注解都加上,暂时性的解决了问题
- 很多子项目已经使用了新的fastjson版本,在加两个版本注解的解决方案下一是代码不优雅,二容易让人迷惑;因此我们就将dubbo中的fastjson版本替换到2.+以上的
解决方案
用高版本的fastjson替换项目中的低版本json
- 修改pom.xml文件,将2.+版本的json依赖导入进来
<jackson.version>2.9.0</jackson.version>
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>${jackson.version}</version>
</dependency>
- 并排除掉1.9版本的fastjson依赖
- dubbo服务的提供者和消费者都要做修改
- 在dto上加@JsonIgnoreProperties注解,注意统一使用2.+以上版本,并搜索是否还有1.9版本的依赖