Comment Jackson peut-il être configuré pour ignorer une valeur de champ pendant la sérialisation si la valeur de ce champ est nulle.
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;
}
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
:; d'une certaine manière, votre annotation n'était pas disponible.@JsonInclude
notation ne fonctionne pas, mais cela fonctionne comme un charme:@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
(j'utilise Jackson 1.9.12 avec Spring 3.2.2.)@JsonSerialize
syntaxe à@JsonInclude
. L'ancienne syntaxe est obsolète.Avec Jackson> 1.9.11 et <2.x, utilisez l'
@JsonSerialize
annotation pour ce faire:@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
la source
@JsonSerialize(using = FooSerializer.class, include = JsonSerialize.Inclusion.NON_NULL)
ne fonctionne pas. les valeurs nullables sont sérialisées.Juste pour développer les autres réponses - si vous devez contrôler l'omission des valeurs nulles sur une base par champ, annotez le champ en question (ou annotez alternativement le 'getter' du champ).
exemple - ici seulement
fieldOne
sera omis de json s'il est nul.fieldTwo
sera toujours inclus, qu'il soit nul ou non.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
etfieldTwo
seront supprimés de json s'ils sont respectivement nuls, car il s'agit de la valeur par défaut définie par l'annotation de classe.fieldThree
cependant, remplacera la valeur par défaut et sera toujours inclus, en raison de l'annotation sur le champ.MISE À JOUR
Ce qui précède est pour Jackson 2 . Pour les versions antérieures de Jackson, vous devez utiliser:
au lieu de
Si cette mise à jour est utile, veuillez noter la réponse de ZiglioUK ci-dessous, elle a souligné la nouvelle annotation Jackson 2 bien avant de mettre à jour ma réponse pour l'utiliser!
la source
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
est déconseilléDans Jackson 2.x, utilisez:
la source
com.fasterxml.jackson.annotation
- Jackson 1.x avaitorg.codehaus.jackson.annoation
Vous pouvez utiliser la configuration de mappeur suivante:
Depuis 2.5, vous pouvez utiliser:
la source
getSerializationConfig()
dit:Note that since instances are immutable, you can NOT change settings by accessing an instance and calling methods: this will simply create new instance of config object.
mapper.setSerializationInclusion(Include.NON_NULL);
Vous pouvez définir
application.properties
:ou
application.yaml
:http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
la source
dans mon cas
l'a fait fonctionner.
la source
{ }
pour null, qui transfère inutilement un idiome Java au consommateur. Même chose avec AtomicReference - le consommateur ne se soucie pas de la façon dont le développeur a choisi d'appliquer la sécurité des threads sur la représentation interne de la réponse.devrait marcher.
Include.NON_EMPTY
indique que la propriété est sérialisée si sa valeur n'est pas nulle et non vide.Include.NON_NULL
indique que la propriété est sérialisée si sa valeur n'est pas nulle.la source
JsonInclude.Include.NON_EMPTY
- est suffisant car il couvre le cas NOT_NULLSi vous souhaitez ajouter cette règle à tous les modèles de Jackson 2.6+, utilisez:
la source
Si dans Spring Boot , vous pouvez personnaliser le jackson
ObjectMapper
directement via les fichiers de propriétés.Exemple
application.yml
:Les valeurs possibles sont:
Plus: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper
la source
Cela fonctionnera dans Spring boot 2.0.3+ et Jackson 2.0+
la source
@JsonInclude(JsonInclude.Include.NON_NULL)
fonctionné pour moi sur Spring boot 2.1.2 et Jackson annotations 2.9.0Pour Jackson 2.5, utilisez:
la source
Cela me préoccupe depuis un certain temps et j'ai finalement trouvé le problème. Le problème était dû à une mauvaise importation. Plus tôt, j'utilisais
Qui avait été déprécié. Remplacez simplement l'importation par
et l'utiliser comme
la source
Configuration globale si vous utilisez Spring
la source
public Jackson2ObjectMapperBuilder serializationInclusion(JsonInclude.Include serializationInclusion) { this.serializationInclusion = serializationInclusion; return this; }
; Il faut utiliser le plus grand rayon d'énumération d'inclusion. par exemple NON_ABSENT inclut NON_NULL et NON_EMPTY inclut les deux. Ainsi, il ne devrait être quebuilder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
JacksonInclude docSi vous essayez de sérialiser une liste d'objets et que l'un d'eux est nul, vous finirez par inclure l'élément nul dans le JSON même avec
aura pour résultat:
pour obtenir ceci:
on peut faire quelque chose comme:
CONSEIL: Si vous utilisez DropWizard, vous pouvez récupérer celui
ObjectMapper
utilisé par Jersey en utilisantenvironment.getObjectMapper()
la source
Nous avons beaucoup de réponses à cette question. Cette réponse peut être utile dans certains scénarios. Si vous souhaitez ignorer les valeurs nulles, vous pouvez utiliser NOT_NULL au niveau de la classe. comme ci-dessous
Parfois, vous devrez peut-être ignorer les valeurs vides telles que vous avez peut-être initialisé le arrayList, mais il n'y a aucun élément dans cette liste.
la source
Jackson 2.x + utilisation
la source
.withSerializationInclusion(JsonInclude.Include.NON_NULL)
à la place, non?getSerializationConfig()
dit:Note that since instances are immutable, you can NOT change settings by accessing an instance and calling methods: this will simply create new instance of config object.
De plus, vous devez changer votre approche lorsque vous utilisez Map myVariable comme décrit dans la documentation pour éliminer les valeurs Null:
la source
Premier cas
Deuxième cas
Si
someString
est nul, il sera ignoré dans les deux cas. SisomeString
est "", il ne sera ignoré que dans le deuxième cas.La même chose pour
List = null
ouList.size() = 0
la source