0

我试图覆盖@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"}

根据杰克逊的代码,发生这种情况是因为构造函数参数也用@JsonProperty. 我正在使用杰克逊 1.9.5。

有没有办法禁用构造函数参数并获取{"prop":"test"}?提前感谢您的帮助!

4

1 回答 1

1

没有办法直接禁用注解,但是如果你想阻止它们的效果,你可以子类JacksonAnnotationIntrospector,并覆盖用于查找@JsonProperty注解(或@JsonCreator)的逻辑。

于 2013-08-20T00:03:19.063 回答