是否可能:在Jackson库中序列化/反序列化期间,在类中有一个字段,但它有不同的名称?
例如,我有“Coordiantes”课程 .
class Coordinates{
int red;
}
对于来自JSON的反序列化,希望具有如下格式:
{
"red":12
}
但是当我将序列化对象时,结果应该是这样的:
{
"r":12
}
我尝试通过在getter和setter(具有不同的值)上应用 @JsonProperty
注释来实现这一点:
class Coordiantes{
int red;
@JsonProperty("r")
public byte getRed() {
return red;
}
@JsonProperty("red")
public void setRed(byte red) {
this.red = red;
}
}
但我有一个例外:
org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段“red”
8 回答
刚测试过,这个有效:
这个想法是方法名称应该是不同的,因此jackson将其解析为不同的字段,而不是一个字段 .
这是测试代码:
结果:
您可以使用在jackson 2.9.0中引入的@jsonAlias
例:
我会将两个不同的getter / setter绑定到一个变量:
您可以使用@JsonSetter和@JsonGetter的组合分别控制反序列化和属性的序列化 .
这不是我期望的解决方案(虽然它是一个合法的用例) . 我的要求是允许现有的错误客户端(已经发布的移动应用程序)使用备用名称 .
解决方案在于提供一个单独的setter方法,如下所示:
可以使用正常的吸气剂/设定剂对 . 您只需在
@JsonProperty
中指定访问模式这是单元测试:
我得到的输出如下:
它们必须将此作为一项功能包含在内,因为现在为getter和setter设置不同的
@JsonProperty
会产生您期望的结果(同一字段的序列化和反序列化期间的不同属性名称) . Jackson 版本2.6.7您可以编写一个序列化类来执行此操作:
公共类符号
{private String symbol;
}
公共类SymbolJsonSerializer扩展JsonSerializer {
}