在 Jersey 中处理重载方法与 Jackson 的“冲突的 Setter 定义”

问题描述 投票:0回答:1

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...
}
java json jackson jaxb jersey
1个回答
0
投票

我认为你应该在好的

setData
方法中添加以下注释:
com.fasterxml.jackson.annotation.JsonSetter

根据 javadoc,

@JsonSetter
是:

可用于定义非静态、单参数方法的注释,该方法用作逻辑属性的“setter”,作为推荐的 JsonProperty 注释的替代方案;或者(从 2.9 及更高版本开始),指定在序列化期间为属性分配值的其他方面。

© www.soinside.com 2019 - 2024. All rights reserved.