1. 概要

このクイックチュートリアルは、シリアル化時にフィールドの名前を変更して別のJSONプロパティにマップする方法を示しています。

より深く掘り下げて、Jackson 2でできる他のクールなことを学びたい場合は、メインのJacksonチュートリアルに進んでください。

2. シリアル化のフィールド名を変更する

単純なエンティティでの作業:

public class MyDto {
    private String stringValue;

    public MyDto() {
        super();
    }

    public String getStringValue() {
        return stringValue;
    }

    public void setStringValue(String stringValue) {
        this.stringValue = stringValue;
    }
}

シリアル化すると、次のJSONが生成されます。

{"stringValue":"some value"}

stringValueの代わりにstrVal を取得するようにその出力をカスタマイズするには、ゲッターに注釈を付けるだけです。

@JsonProperty("strVal")
public String getStringValue() {
    return stringValue;
}

ここで、シリアル化すると、目的の出力が得られます。

{"strVal":"some value"}

簡単な単体テストで、出力が正しいことを確認する必要があります。

@Test
public void givenNameOfFieldIsChanged_whenSerializing_thenCorrect() 
  throws JsonParseException, IOException {
    ObjectMapper mapper = new ObjectMapper();
    MyDtoFieldNameChanged dtoObject = new MyDtoFieldNameChanged();
    dtoObject.setStringValue("a");

    String dtoAsString = mapper.writeValueAsString(dtoObject);

    assertThat(dtoAsString, not(containsString("stringValue")));
    assertThat(dtoAsString, containsString("strVal"));
}

3. 結論

特定のJSON形式に準拠するようにエンティティをマーシャリングすることは一般的なタスクです。この記事では、@JsonPropertyアノテーションを使用するだけでその方法を説明します。

これらすべての例とコードスニペットの実装は、mygithubプロジェクトにあります。