我试图在序列化期间覆盖@JsonProperty
中指定的属性名称,但在生成的json中获取旧的和新的命名属性。
实体:
class Bean {
@JsonProperty("p")
String prop;
@JsonCreator
Bean(@JsonProperty("p") String prop) {
this.prop = prop;
}
}
序列化代码:
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(new PropertyNamingStrategy() {
@Override
public String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) {
return "prop";
}
});
System.out.println(mapper.writeValueAsString(new Bean("test")));
结果:
{"p":"test","prop":"test"}
根据Jackson的代码,发生这种情况是因为构造函数参数也使用@JsonProperty
进行了注释。我正在使用Jackson 1.9.5。
有没有办法禁用构造函数参数并获取{"prop":"test"}
?
提前感谢您的帮助!
答案 0 :(得分:1)
无法直接禁用注释,但如果要阻止其效果,则可以对JacksonAnnotationIntrospector
进行子类化,并覆盖用于查找@JsonProperty
注释的逻辑(或@JsonCreator
})。