ジャクソンでヌルフィールドを無視する

1概要

この簡単なチュートリアルでは、Javaクラスを直列化するときに** Jackson 2がnullフィールドを無視するように設定する方法について説明します。

あなたがもっと深く掘り下げて あなたがジャクソン2 ですることができる** 他のクールなことを学びたいなら - メインのジャクソンチュートリアル に向かって進んでください。

2クラスのNULLフィールドを無視

Jacksonはこの振る舞いをクラスレベルで制御することを認めています。

@JsonInclude(Include.NON__NULL)
public class MyDto { ... }

または - 粒度 - フィールドレベルで:

public class MyDto {

    @JsonInclude(Include.NON__NULL)
    private String stringValue;

    private int intValue;

   //standard getters and setters
}

これで、null値が実際のJSONの最終出力に含まれていないことをテストできます。

@Test
public void givenNullsIgnoredOnClass__whenWritingObjectWithNullField__thenIgnored()
  throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    MyDto dtoObject = new MyDto();

    String dtoAsString = mapper.writeValueAsString(dtoObject);

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

3 NULLフィールドをグローバルに無視

Jacksonは、この動作を ObjectMapper でグローバルに設定することもできます。

mapper.setSerializationInclusion(Include.NON__NULL);

このマッパーを通して直列化されたクラスのnullフィールドは無視されます

@Test
public void givenNullsIgnoredGlobally__whenWritingObjectWithNullField__thenIgnored()
  throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(Include.NON__NULL);
    MyDto dtoObject = new MyDto();

    String dtoAsString = mapper.writeValueAsString(dtoObject);

    assertThat(dtoAsString, containsString("intValue"));
    assertThat(dtoAsString, containsString("booleanValue"));
    assertThat(dtoAsString, not(containsString("stringValue")));
}

4結論

nullフィールドを無視することは、そのような一般的なJackson構成です。これは、json出力をより適切に制御する必要がある場合が多いためです。

この記事はクラスのためにそれをする方法を示します - しかし、 Mapをシリアライズするときにnull値を無視する のようなより高度なユースケースがあります - それはカバーされますマップ内のnull値およびBean内のnullフィールド[ここ]。

これらすべての例とコードスニペットの実装は、https://github.com/eugenp/tutorials/tree/master/jackson#readme にあります。 - これはEclipseベースのプロジェクトです。そのままインポートして実行するのは簡単です。