Настройка Spring Boot и ObjectMapper

1

Использование Spring Boot 1.2.2 для создания приложения Spring MVC. Я также использую Spring HATEOAS.

Проблема, которую я испытываю, заключается в том, что мой сконфигурированный ObjectMapper используется правильно, когда мои методы контроллера возвращают List<>, но при возврате классов Resource (например, MyClass extends ResourceSupport) используется другой ObjectMapper,

Это более чем немного разочаровывает, чтобы попытаться настроить Jackson ObjectMapper. Я следовал за документацию и добавил свой собственный ObjectMapper @Bean к @Configuration класса и аннотированный его @Primary, и что один используется при сериализации List<>.

Установка точки останова в контрольной точке конструктора ObjectMapper показывает, что конструктор вызывается примерно 20 раз. Я сделал плохой обзор каждого сценария:

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

1 ответ

1

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

Изменение: есть проблема, открывающая для улучшения использования ObjectMapper Actuator.

  • 0
    Мне придется вернуться к подходу «больше контроля», потому что, когда я попытался переключиться на это, ни мои ресурсы, ни списки ресурсов не будут правильно сериализованы. Я обнаружил, что halObjectMapper - это сериализация автономных ресурсов. Я использовал @Qualifier, чтобы получить ссылку на него, и пропустил его через мой Jackson2ObjectMapperBuilder, и это решило мою проблему ... на данный момент.
  • 0
    Spring Boot должен настроить HAL ObjectMapper для вас, используя сборщик: github.com/spring-projects/spring-boot/blob/master/… . Если этого не происходит, возможно, вы нашли ошибку
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню