我正在尝试使用 Jackson 反序列化存储在 CouchDb 中的 JSON 对象。该对象需要反序列化为包含重载方法的 pojo。当我尝试从沙发上检索对象并进行反序列化时,出现以下异常:
org.ektorp.DbAccessException:org.codehaus.jackson.map.JsonMappingException:属性“乘数”的设置器定义冲突:com.db.commodities.framework.sdos.model.security.EqOpt#setMultiplier(1 params) vs com.db .commodities.framework.sdos.model.security.EqOpt#setMultiplier(1 参数)
我试图注释我希望杰克逊使用的二传手,但这似乎没有用。
@JsonProperty("multiplier")
public void setMultiplier(SDOSAttribute multiplier) {
this.multiplier = multiplier;
}
public void setMultiplier(double multiplier) {
this.multiplier.setValue(String.valueOf(multiplier));
}
如何配置 Jackson 以使用特定方法正确反序列化?还是我以错误的方式解决了这个问题?
编辑:
我做了以下更改。这似乎可行,但有点难看。如果有人有更好的方法来做到这一点,请随时分享,我很乐意接受。
@JsonProperty("multiplier")
protected void setMultiplierAttribute(SDOSAttribute multiplier) {
this.multiplier = multiplier;
}
@JsonIgnore
public void setMultiplier(double multiplier) {
this.multiplier.setValue(String.valueOf(multiplier));
}
原文由 gregwhitaker 发布,翻译遵循 CC BY-SA 4.0 许可协议
不必更改 setter 方法的名称以避免歧义。否则你在正确的轨道上
@JsonIgnore
。使用@JsonIgnore
忽略所有同名方法,使用的方法不需要@JsonProperty
注释。这里有一个简单的例子来证明这一点。
输入.json :
{"value":"forty-two"}
Foo.java:
如果您不想使用 Jackson 注释更改原始 POJO defs,则可以使用
MixIn
。