头图

问题描述

由于接口传参需要序列化对象,且字段名是全大写例如ZPRODUCT需要传输的格式为

{
    "ZPRODUCT":"afb"
}

而如果不加JsonProperty注解会为

{
    "zproduct":"afb"
}

这不是我们想要的,因而我们使用@JsonProperty("ZPRODUCT")来声明该字段序列化为我们定义的全大写,同时我们项目中使用到了Lombok,使用@Data注解来生成get|set等方法,当我们序列化之后发现序列化字符串为

{
    "ZPRODUCT":"afb",
    "zproduct":"afb"
}

没错,多了一个属性。
很明显的序列化问题,而且必然和Lombok存在关系,所以我们打开编译后的Class文件发现setZPRODUCT方法上没有被注解@JsonProperty("ZPRODUCT")

解决方案

1:lombok更改为1.18.14,没错这个版本可以,我之前使用的为1.18.22对比两个版本生成的class文件可以发现14版本的set方法上有@JsonProperty("ZPRODUCT")注解而22版本上没有
2: 去掉@Data注解,自己写get|set方法,并加上注解@JsonProperty("ZPRODUCT")


独上兰舟
119 声望5 粉丝

路漫漫其修远兮,吾将上下而求索。