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ます。Jackson 1.9.5 を使用しています。

コンストラクターのパラメーターを無効にして取得する方法はあります{"prop":"test"}か? 事前に助けてくれてありがとう!

4

1 に答える 1

1

アノテーションを直接無効にする方法はありませんが、その効果をブロックしたい場合は、 をサブクラス化し、アノテーション (または)JacksonAnnotationIntrospectorの検索に使用されるロジックをオーバーライドできます。@JsonProperty@JsonCreator

于 2013-08-20T00:03:19.063 に答える