自定义命名策略和杰克逊的@JsonProperty

时间:2013-08-19 17:46:58

标签: java json serialization jackson

我试图在序列化期间覆盖@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"}? 提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

无法直接禁用注释,但如果要阻止其效果,则可以对JacksonAnnotationIntrospector进行子类化,并覆盖用于查找@JsonProperty注释的逻辑(或@JsonCreator })。