Использование Spring Boot 1.2.2 для создания приложения Spring MVC. Я также использую Spring HATEOAS.Конфигурация Spring Boot и ObjectMapper
Проблема, которую я имею, что мой настроен ObjectMapper используется должным образом, когда мои методы контроллера возвращают List<>
, а другой ObjectMapper используется, когда я вернуть мои Resource
классы (например, MyClass extends ResourceSupport
)
Это больше, чем немного разочаровывает, чтобы попробовать configure Jackson's ObjectMapper. Я выполнил документацию и добавил свой собственный ObjectMapper
@Bean
в класс @Configuration
и аннотировал его @Primary
, и этот используется при сериализации List<>
.
Установка точки останова в контрольной точке конструктора ObjectMapper показывает, что конструктор вызывается примерно 20 раз. Я сделал плохое резюме каждого сценария:
- Мой класс конфигурации (
@Bean
аннотированный с@Primary
) - halObjectMapper
- WebMvcConfigurationSupport-> requestMappingHandlerAdapter() -> AllEncompassingFormHttpMessageConverter-> Jackson2ObjectMapperBuilder
- configureMessageConverters() - > Jackson2ObjectMapperBuilder
- maybeRegisterModule() -> Jackson2ObjectMapperBuilder
- WebMvcConfigurationSupport-> addDefaultHandlerExceptionResolver() -> AllEncompassingFormHttpMessageConverter-> Jackson2ObjectMapperBuilder
- 2 раза: WebMvcConfigurationSupport-> addDefaultHttpMessageConverters() -> AllEncompassingFormHttpMessageConverter-> Jackson2ObjectMapperBuilder
- 12 раз: EndpointMBeanExporter (весна загрузочного привода)
Мне придется пересмотреть подход «большего контроля», потому что, когда я попытался переключиться на то, что ни мои ресурсы, ни списки ресурсов не будут правильно сериализованы. Я обнаружил, что halObjectMapper - это то, что сериализует автономные ресурсы. Я использовал @Qualifier, чтобы получить ссылку на него и запустить его через мой Jackson2ObjectMapperBuilder, и это решило мою проблему ... пока. –
Spring Boot должен настроить HAL ObjectMapper для вас с помощью построителя: https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/ загрузки/Автоконфигурирование/hateoas/HypermediaAutoConfiguration.java # L128. Если этого не происходит, возможно, вы обнаружили ошибку –
. Я подтвержу и посмотрю, смогу ли я понять, почему это может произойти. Благодаря! –