Question 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; 
}

547
2017-08-01 10:40


origine


Réponses:


Pour supprimer les propriétés de sérialisation avec des valeurs nulles à l'aide de Jackson> 2.0, vous pouvez configurer le ObjectMapper directement, ou utilisez le @JsonInclude annotation:

mapper.setSerializationInclusion(Include.NON_NULL);

ou:

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

Alternativement, vous pouvez utiliser @JsonInclude dans un getter pour que l'attribut soit affiché si la valeur n'est pas nulle.

Un exemple plus complet est disponible dans ma réponse à Comment empêcher les valeurs nulles dans un champ Map et null à l'intérieur d'un bean d'être sérialisé via Jackson.


908
2017-08-01 14:57



Avec Jackson> 1.9.11 et <2.x utiliser @JsonSerialize annotation pour le faire:

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)


114
2018-06-27 07:39



Juste pour développer les autres réponses - si vous devez contrôler l'omission de valeurs nulles par champ, annoter le champ en question (ou bien annoter le 'getter' du champ).

Exemple - ici seulement fieldOne sera omis de json s'il est nul. fieldTwo sera toujours inclus indépendamment de si elle est nulle.

public class Foo {

    @JsonInclude(JsonInclude.Include.NON_NULL) 
    private String fieldOne;

    private String fieldTwo;
}

Pour omettre toutes les valeurs nulles de la classe par défaut, annotez la classe. Les annotations par champ / getter peuvent toujours être utilisées pour remplacer cette valeur par défaut si nécessaire.

Exemple - ici fieldOne et fieldTwo seront ignorées de json si elles sont nulles, respectivement, car il s'agit de la valeur par défaut définie par l'annotation de classe. fieldThree Cependant, il remplacera la valeur par défaut et sera toujours inclus, à cause de l'annotation sur le terrain.

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Foo {

    private String fieldOne;

    private String fieldTwo;

    @JsonInclude(JsonInclude.Include.ALWAYS)
    private String fieldThree;
}

ACTUALISÉ  utiliser Jackson 2 - pour les versions antérieures de Jackson

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) 

au lieu de

@JsonInclude(JsonInclude.Include.NON_NULL)

Si cette mise à jour est utile, veuillez reporter la réponse de ZiglioUK ci-dessous, elle a indiqué cette nouvelle annotation bien avant cette mise à jour!


96
2017-07-29 13:46



Dans Jackson 2.x, utilisez:

@JsonInclude(JsonInclude.Include.NON_NULL)

55
2018-01-20 02:28



Vous pouvez utiliser la configuration de mappeur suivante:

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

Depuis 2.5 vous pouvez user:

mapper.setSerializationInclusion(Include.NON_NULL);

28
2018-04-01 14:47



dans mon cas

@JsonInclude(Include.NON_EMPTY)

fait marcher ça.


10
2018-04-24 19:07



Vous pouvez définir application.properties (ou application.yml ou autre chose):

jackson.default-property-inclusion=non_null

http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html


8
2017-11-16 08:04



@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonInclude(JsonInclude.Include.NON_EMPTY)

devrait marcher.

Include.NON_EMPTY indique que la propriété est sérialisée si sa valeur n'est pas null et n'est pas vide. Include.NON_NULL indique que la propriété est sérialisée si sa valeur n'est pas nulle.


6
2018-05-02 15:44