Comment définir globalement Jackson pour ignorer les propriétés inconnues au spring?

Jackson a des annotations pour ignorer les propriétés inconnues dans une classe en utilisant:

@JsonIgnoreProperties(ignoreUnknown = true) 

Il vous permet d’ignorer une propriété spécifique en utilisant cette annotation:

 @JsonIgnore 

Si vous souhaitez le définir globalement, vous pouvez modifier le mappeur d’object:

 // jackson 1.9 and before objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); // or jackson 2.0 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

Comment définissez-vous cela globalement en utilisant Spring afin qu’il puisse être @Autowired au démarrage du serveur sans écrire de classes supplémentaires?

Ceci peut être réalisé en utilisant MethodInvokingFactoryBean de Spring:

        FAIL_ON_UNKNOWN_PROPERTIES false    

Cela peut être câblé à un RestTemplate comme ceci:

          

Il peut également être injecté directement dans les convertisseurs de messages pour une utilisation avec Spring MVC:

         

Pour jackson 1.9x ou inférieur, vous pouvez ignorer les propriétés inconnues avec le fournisseur d’object mappeur

 @Provider @Component public class JerseyObjectMapperProvider implements ContextResolver { @Override public ObjectMapper getContext(Class type) { ObjectMapper result = new ObjectMapper(); result.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); return result; } } 

Pour jackson 2.x et supérieur, vous pouvez ignorer les propriétés inconnues avec le fournisseur d’object mapper

 @Provider @Component public class JerseyObjectMapperProvider implements ContextResolver { @Override public ObjectMapper getContext(Class type) { ObjectMapper result = new ObjectMapper(); result.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); return result; } } 

Les classes de Jersey ne sont pas découvertes automatiquement au spring. Je dois les enregistrer manuellement.

 public class JerseyConfig extends ResourceConfig { public JerseyConfig() { register(JerseyObjectMapperProvider.class); } } 

Pour les nouvelles versions de Jackson (2.x), il y a quelques modifications:

        FAIL_ON_UNKNOWN_PROPERTIES false