776 votes

Comment dire à Jackson d'ignorer un champ pendant la sérialisation si sa valeur est nulle?

Comment Jackson peut-il être configuré pour ignorer une valeur de champ pendant la sérialisation si la valeur de ce champ est null. Par exemple:

 public class SomeClass {
   // what jackson annotation causes jackson to skip over this value if it is null but will 
   // serialize it otherwise 
   private String someValue; 
}
 

1211voto

Programmer Bruce Points 16306

Pour supprimer la sérialisation des propriétés avec des valeurs null, vous pouvez configurer l' ObjectMapper directement, ou faire usage de l' @JsonInclude d'annotation:

mapper.setSerializationInclusion(Include.NON_NULL);

ou:

@JsonInclude(Include.NON_NULL)
class Foo
{
  String bar;
}

Un exemple plus complet est disponible dans ma réponse à Comment prévenir les valeurs null à l'intérieur d'une Carte et de champs null à l'intérieur d'un haricot de la prise en sérialisé par Jackson.

150voto

davnicwil Points 1417

Juste pour se développer sur les autres réponses - si vous avez besoin de contrôler l'omission des valeurs nulles sur un champ par champ, d'annoter le domaine en question (ou, alternativement, d'annoter le champ "getter').

par exemple, ici, seulement fieldOne sera oublié de json si elle est nulle. fieldTwo sera toujours inclus, indépendamment de si elle est nulle.

public class Foo {

    @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
    private String fieldOne;

    private String fieldTwo;
}

Omettre toutes les valeurs null dans la classe comme un défaut, d'annoter la classe. Par-champ/de lecture des annotations peut toujours être utilisé pour remplacer cette valeur par défaut si nécessaire.

par exemple, ici, fieldOne et fieldTwo sera oublié de json si ils sont nuls, respectivement, parce que c'est la valeur par défaut définie par la classe d'annotation. fieldThree cependant remplacer la valeur par défaut et sera toujours inclus, en raison de l'annotation sur le terrain.

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class Foo {

    private String fieldOne;

    private String fieldTwo;

    @JsonSerialize(include=JsonSerialize.Inclusion.ALWAYS)
    private String fieldThree;
}

135voto

WTK Points 7883

Avec Jackson> 1.9.11, utilisez @JsonSerialize annotation pour faire cela:

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)

66voto

ZiglioNZ Points 1007

Jackson 2.x:

@JsonInclude (JsonInclude.Include.NON_NULL)

44voto

Eren Yilmaz Points 149

Vous pouvez utiliser la configuration de mappeur suivante:

 mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X