2015-03-24 7 views
1

Использование 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 раз. Я сделал плохое резюме каждого сценария:

  1. Мой класс конфигурации (@Bean аннотированный с @Primary)
  2. halObjectMapper
  3. WebMvcConfigurationSupport-> requestMappingHandlerAdapter() -> AllEncompassingFormHttpMessageConverter-> Jackson2ObjectMapperBuilder
  4. configureMessageConverters() - > Jackson2ObjectMapperBuilder
  5. maybeRegisterModule() -> Jackson2ObjectMapperBuilder
  6. WebMvcConfigurationSupport-> addDefaultHandlerExceptionResolver() -> AllEncompassingFormHttpMessageConverter-> Jackson2ObjectMapperBuilder
  7. 2 раза: WebMvcConfigurationSupport-> addDefaultHttpMessageConverters() -> AllEncompassingFormHttpMessageConverter-> Jackson2ObjectMapperBuilder
  8. 12 раз: EndpointMBeanExporter (весна загрузочного привода)

ответ

0

I Рекомендуем либо использовать application.properties, чтобы настроить Jackson, либо, если вам нужно больше контроля, объявить свой собственный бонус Jackson2ObjectMapperBuilder. В любом случае в конечном итоге вы получаете bean-компонент Jackson2ObjectMapperBuilder в контексте приложения, который затем может использоваться другими компонентами для создания ObjectMapper s с необходимой конфигурацией или для применения этой конфигурации к любым существующим ObjectMapper.

Редактировать: есть an issue открыть для улучшения использования Привод ObjectMapper.

+0

Мне придется пересмотреть подход «большего контроля», потому что, когда я попытался переключиться на то, что ни мои ресурсы, ни списки ресурсов не будут правильно сериализованы. Я обнаружил, что halObjectMapper - это то, что сериализует автономные ресурсы. Я использовал @Qualifier, чтобы получить ссылку на него и запустить его через мой Jackson2ObjectMapperBuilder, и это решило мою проблему ... пока. –

+0

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. Если этого не происходит, возможно, вы обнаружили ошибку –

+0

. Я подтвержу и посмотрю, смогу ли я понять, почему это может произойти. Благодаря! –

Смежные вопросы