Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you globally set Jackson to ignore unknown properties within Spring?

Jackson has annotations for ignoring unknown properties within a class using:

@JsonIgnoreProperties(ignoreUnknown = true)  

It allows you to ignore a specific property using this annotation:

@JsonIgnore 

If you'd like to globally set it you can modify the object mapper:

// 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); 

How do you set this globally using spring so it can be @Autowired at server start up without writing additional classes?

like image 694
jnrcorp Avatar asked Jan 15 '13 17:01

jnrcorp


People also ask

How do I ignore unknown properties on Jackson?

Jackson API provides two ways to ignore unknown fields, first at the class level using @JsonIgnoreProperties annotation and second at the ObjectMapper level using configure() method.

How do I ignore a field in JSON request?

The Jackson @JsonIgnore annotation can be used to ignore a certain property or field of a Java object. The property can be ignored both when reading JSON into Java objects and when writing Java objects into JSON.

How do I ignore NULL values in JSON Request spring boot?

You can ignore null fields at the class level by using @JsonInclude(Include. NON_NULL) to only include non-null fields, thus excluding any attribute whose value is null. You can also use the same annotation at the field level to instruct Jackson to ignore that field while converting Java object to json if it's null.

Should I declare Jackson's ObjectMapper as a static field?

Yes, that is safe and recommended.


1 Answers

For jackson 1.9x or below you can ignore unknown properties with object mapper provider

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

For jackson 2.x and above you can ignore unknown properties with object mapper provider

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

Jersey classes are not auto-discovered by Spring. Have to register them manually.

public class JerseyConfig extends ResourceConfig {     public JerseyConfig() {         register(JerseyObjectMapperProvider.class);     } } 
like image 91
xdebug Avatar answered Oct 11 '22 21:10

xdebug