Мой главный вопрос: где / когда Spring использует (внедряет) bean-компонент Jackson2ObjectMapperBuilderCustomizer, определенный в классе @Configuration проекта - не могли бы вы указать мне строку кода? Направления здесь создают впечатление, что все, что мне нужно сделать, это определить этот компонент для управления тем, как ответы сериализуются в JSON, но он не работает - т.е. я не могу отключить любую из функций SerializationFeatures.
Немного предыстории:
- Spring-boot 2.1.1 выпуск
- spring-web mvc -5.1.3.release
- Джексон 2.9.7
Я написал REST API (@RestController). Я не могу настроить способ, которым Джексон сериализует типы Java Instant в ответе http. Я пробовал различные комбинации определения бина ObjectMapper, бина MappingJackson2HttpMessageConverter, а также бина Jackson2ObjectMapperBuilderCustomizer в моей конфигурации (не все сразу):
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> {
builder.modules(new JavaTimeModule());
builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
builder.featuresToDisable(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS);
}
}
Когда я отлаживаю приложение, оно выглядит как RequestMappinghandap инициализирует свои конвертеры с помощью WebMvcConfigurationSupport, но все эти конвертеры создаются вручную, а не вводятся. То есть все преобразователи MappingJackson2HttpMessageConverter создаются с вызовами `new MappingJackson2HttpMessageConverter ()", который, в свою очередь, просто создает стандартные Jackson2ObjectMapperBuilders и ObjectMappers:
// in org.springframework:spring-web:5.1.3.RELEASE:
public class MappingJackson2HttpMessageConverter extends AbstractJackson2HttpMessageConverter {
// ... more
public MappingJackson2HttpMessageConverter() {
this(Jackson2ObjectMapperBuilder.json().build());
}
}
public class Jackson2ObjectMapperBuilder {
public static Jackson2ObjectMapperBuilder json() {
return new Jackson2ObjectMapperBuilder();
}
}
. HttpEntityMethod может использовать тот же ответ, что и он может использовать. не могу найти, где в этом жизненном цикле Jackson2ObjectMapperBuilderCustomizer выполняет настройку. Я знаю, что, должно быть, что-то пропустил, но я не смог его найти.