我正在使用 Jackson (2.1.1) 进行 JSON 序列化/反序列化。我有一个带有 JAXB 注释的现有类。这些注释中的大多数都是正确的,可以按原样与杰克逊一起使用。我正在使用 mix-ins 来稍微改变这些类的反序列化/序列化。
在我的 ObjectMapper 构造函数中,我执行以下操作:
setAnnotationIntrospector(AnnotationIntrospector.pair(
new JacksonAnnotationIntrospector(),
new JaxbAnnotationIntrospector(getTypeFactory())));
基于上述,Jackson 注释优先于 Jaxb,因为自省的顺序。这是基于 Jackson Jaxb文档。对于我想忽略@JsonIgnore
的字段,添加到混合中的字段可以正常工作。有几个字段被标记为@XmlTransient
现有的类,我不想忽略它们。我已经尝试@JsonProperty
在混入中添加到该字段,但它似乎不起作用。
这是原始类:
public class Foo {
@XmlTransient public String getBar() {...}
public String getBaz() {...}
}
这是混音:
public interface FooMixIn {
@JsonIgnore String getBaz(); //ignore the baz property
@JsonProperty String getBar(); //override @XmlTransient with @JsonProperty
}
知道如何在不修改原始类的情况下解决此问题吗?
我还测试了将@JsonProperty 添加到成员而不是使用混合:
public class Foo {
@JsonProperty @XmlTransient public String getBar() {...}
@JsonIgnore public String getBaz() {...}
}
我似乎得到了与混入相同的行为。除非删除 @XmlTransient,否则该属性将被忽略。