Используйте ContextResolver
для глобальной настройки ObjectMapper
.Существует DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
, который мы можем установить в false, чтобы сказать Джексону, чтобы он не беспокоился о неизвестных свойствах.
@Provider
public class ObjectMapperResolver implements ContextResolver<ObjectMapper> {
private ObjectMapper mapper;
public ObjectMapperResolver() {
mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
@Override
public ObjectMapper getContext(Class<?> cls) {
return mapper;
}
}
Поставщик Jackson JAX-RS вызовет этот преобразователь, чтобы получитьObjectMapper
, который он использует для десериализации.
Если вы используете сканирование для регистрации своих ресурсов и поставщиков, этот класс должен автоматически регистрироваться из-за аннотации @Provider
.Если вы не используете сканирование, то вам необходимо убедиться, что вы зарегистрировали этот преобразователь, иначе он не будет использоваться.
Редактировать
Если кодовый код Swagger ужесоздавая ContextResolver
, вы можете просто создать его в вашем преобразователе и получить ObjectMapper
из этого преобразователя вместо создания вашего собственного преобразователя.Это гарантирует, что любые конфигурации для ObjectMapper
, сделанные в сгенерированном преобразователе, все еще вступают в силу.Затем добавьте @Priority(Integer.MIN_VALUE)
к классу, чтобы он гарантированно использовался поверх сгенерированного, если сгенерированный также будет зарегистрирован.
@Provider
@Priority(Integer.MIN_VALUE)
public class ObjectMapperResolver implements ContextResolver<ObjectMapper> {
private ObjectMapper mapper;
public ObjectMapperResolver() {
JSON swaggerResolver = new JSON();
mapper = swaggerResolver.getContext(null);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
@Override
public ObjectMapper getContext(Class<?> cls) {
return mapper;
}
}