我的 JSON 有效负载曾经是:
{ "a": "some-value" }
我将其映射到:
class Item {
@JsonProperty("a")
public String value;
}
现在我想弃用属性
a
并引入一个新属性 b
来代替它。在宽限期内,两者均应被接受。
@JsonAlias
似乎是实现这一目标的最佳方法:
class Item {
@JsonProperty("b")
@JsonAlias("a")
public String value;
}
当
a
或 b
存在时,以及当两者都存在并且 b
在 a
之后时,它可以完美工作:
{ "b": "some-value" }
{ "a": "some-value" }
{ "a": "this-is-ignored", "b": "uses-this-value" }
但是,属性是按顺序处理的,Jackson 将选择最后一个,因此如果已弃用的属性位于最后,则它获胜:
{ "b": "it-should-use-this-value", "a": "but-uses-this-one-instead" }
有没有一种方法可以将 Jackson 配置为始终首选主映射并忽略别名(如果存在多个别名)?
不。你能做的最好的事情就是为全班定制解串器。