我试图使用Jackson反序列化存储在CouchDb中的JSON对象。该对象需要反序列化成包含重载方法的pojo。当我尝试检索沙发上的对象,做反序列化,我得到以下异常:将JSON反序列化到使用Jackson重载方法的对象中
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 params)
我试过了剔除我希望杰克逊使用的二传手,但这看起来没有奏效。
@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));
}
是的,这是有效的修补。我同意如果推断被使用,如果只明确指出一种替代方案,其他人可以在过度模糊的情况下被忽略 - 我可以为此添加Jira功能请求。 – StaxMan 2011-06-15 20:57:20
另一件事 - 有趣的是,这里有一个过载问题,因为杰克逊确实允许有限的超载。具体来说,如果参数是int或long(而不是double),则不会发生问题。但是不支持其他基本类型(double,float,boolean,char,byte,short);尽管浮动和双重可能应该是。使用int和long差异基于JSON的含义解析 - JSON对象使用POJO setter; JSON数字为int或long。 – StaxMan 2011-06-15 21:04:53