你好,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...
}
字符串
1条答案
按热度按时间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
。