json 在Jersey中使用Jackson处理重载方法的“删除Setter定义”

oxosxuxt  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(72)

你好,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...
}

字符串

a5g8bdjr

a5g8bdjr1#

我认为您应该将以下注解添加到好的setData方法中:com.fasterxml.jackson.annotation.JsonSetter
根据javadoc,@JsonSetter是:
注解,可用于定义非静态的单参数方法,用作逻辑属性的“setter”,作为推荐的JsonProperty注解的替代方案;或者(从2.9及更高版本开始),指定在序列化期间为属性赋值的其他方面。
如果不起作用,请尝试com.fasterxml.jackson.annotation.JsonProperty,它也记录如下:
标记注解,可用于将非静态方法定义为逻辑属性的“setter”或“getter”(取决于其签名),或将非静态对象字段(序列化,非序列化)用作逻辑属性。
如果不起作用,那么Jersey可能忽略了您的Jackson注解,请尝试在应用程序上下文中注册org.glassfish.jersey.jackson.JacksonFeature

相关问题