230 votes

comment spécifier jackson pour n'utiliser que des champs - de préférence globalement

Par défaut jackon comportement semble utiliser les deux propriétés (getters et setters) et les champs de sérialiser et désérialiser en json.

Je voudrais utiliser les champs comme canoniques source de sérialisation config et donc ne veulent pas jackson à regarder de propriétés.

Je peux le faire sur un individu de la classe de base avec l'annotation:

 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)

Mais je ne veux pas mettre ça sur chaque classe,...

Est-il possible de configurer ce à l'échelle mondiale? Comme ajouter un peu de l'Objet de Mappeur?

194voto

Tim Helmstedt Points 687

Vous pouvez configurer des ObjectMappers individuels comme ceci:

 ObjectMapper mapper  = new ObjectMapper();
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
 

Si vous souhaitez le définir globalement, j'accède généralement à un mappeur configuré via une classe wrapper.

182voto

lukk Points 879

Dans Jackson 2.0 et versions ultérieures, vous pouvez simplement utiliser:

 import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;   

...

ObjectMapper mapper = new ObjectMapper();    
mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
 

désactiver la détection automatique.

47voto

GKislin Points 254

J'ai passé beaucoup de temps: pourquoi ni l'un ni l'autre

   @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) 
 

non

   setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE);
  setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
  setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
 

ne fonctionne pas pour mon getter / setter booléen. La solution est simple:

   @JsonAutoDetect(isGetterVisibility = Visibility.NONE, ...          
  setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);
 

18voto

mfe Points 21

pour jackson 1.9.10 j'utilise

 ObjectMapper mapper = new ObjectMapper();

mapper.setVisibility(JsonMethod.ALL, Visibility.NONE);
mapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);
 

activer la déduction automatique.

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