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?
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.
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.
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.
Yes, that is safe and recommended.
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); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With