Stack Overflow 社区您好,
我在基于 Jersey 的应用程序中遇到了 Jackson 的问题,特别是处理与重载 setter 方法相关的“属性的 setter 定义冲突”错误。尽管使用了
@JsonIgnore
和 @XmlTransient
注释,问题仍然存在。
问题描述: 当 Jersey 处理请求时,由于多个重载的 setter 方法,它会失败并出现错误“属性的 setter 定义冲突”。其中两个方法用
@JsonIgnore
和 @XmlTransient
注释,但它们似乎被忽略了。
示例代码: 这是我的类的简化版本,其中包含重载的 setter 方法:
public class MyEntity {
private String data;
public void setData(String data) {
this.data = data;
}
@JsonIgnore
@XmlTransient
public void setData(CustomType1 data) {
this.data = data.toString();
}
@JsonIgnore
@XmlTransient
public void setData(CustomType2 data) {
this.data = data.toString();
}
// Other fields and methods...
}
我认为你应该在好的
setData
方法中添加以下注释:com.fasterxml.jackson.annotation.JsonSetter
根据 javadoc,
@JsonSetter
是:
可用于定义非静态、单参数方法的注释,该方法用作逻辑属性的“setter”,作为推荐的 JsonProperty 注释的替代方案;或者(从 2.9 及更高版本开始),指定在序列化期间为属性分配值的其他方面。