Java Spring引导和ObjectMapper配置

Java Spring引导和ObjectMapper配置,java,spring,spring-boot,Java,Spring,Spring Boot,使用SpringBoot1.2.2创建SpringMVC应用程序。我也在使用Spring HATEOAS 我遇到的问题是,当我的控制器方法返回列表时,配置的ObjectMapper被正确使用,但当我返回资源类时,使用的是不同的ObjectMapper(例如MyClass扩展了ResourceSupport) 这是一个比一个更令人沮丧的尝试。我按照文档的要求,将自己的对象映射器@Bean添加到@Configuration类中,并用@Primary对其进行注释,在序列化列表时使用该映射器 在Obje

使用SpringBoot1.2.2创建SpringMVC应用程序。我也在使用Spring HATEOAS

我遇到的问题是,当我的控制器方法返回
列表时,配置的ObjectMapper被正确使用,但当我返回
资源
类时,使用的是不同的ObjectMapper(例如
MyClass扩展了ResourceSupport

这是一个比一个更令人沮丧的尝试。我按照文档的要求,将自己的
对象映射器
@Bean
添加到
@Configuration
类中,并用
@Primary
对其进行注释,在序列化
列表时使用该映射器

在ObjectMapper构造函数断点中设置断点表明该构造函数被调用了大约20次。我对每个场景都做了一个糟糕的总结:

  • 我的配置类(
    @Bean
    @Primary
    注释)
  • HaloObjectMapper
  • WebMvcConfigurationSupport->requestMappingHandlerAdapter()->AllencompacsingFormHttpMessageConverter->Jackson2ObjectMapperBuilder
  • configureMessageConverters()->Jackson2ObjectMapperBuilder
  • PotentialRegisterModule()->Jackson2ObjectMapperBuilder
  • WebMvcConfigurationSupport->addDefaultHandlerExceptionResolver()->AllencompacsingFormHttpMessageConverter->Jackson2ObjectMapperBuilder
  • 2次:WebMvcConfigurationSupport->addDefaultHttpMessageConverters()->AllEncompassingFormHttpMessageConverter->Jackson2ObjectMapperBuilder
  • 12次:EndpointMBeanExporter(弹簧启动执行器)

  • 我建议使用
    application.properties
    来配置Jackson,或者,如果您需要更多的控制,可以声明自己的
    Jackson2ObjectMapperBuilder
    bean。在任何一种情况下,您都会在应用程序上下文中得到一个
    Jackson2ObjectMapperBuilder
    bean,其他组件可以使用该bean创建具有所需配置的
    ObjectMapper
    s,或将该配置应用于任何现有的
    ObjectMapper
    s


    编辑:可以改进执行器的
    对象映射器的使用。

    您可以使用spring boot
    应用程序配置Jackson。属性

    参见class
    org.springframework.boot.autoconfigure.jackson.JacksonProperties
    或者使用Spring工具套件,只需编辑您的
    应用程序.properties

    开始键入
    spring.jackson.
    然后点击
    Ctrl Space
    查看可用属性。

    我必须重新访问“更多控制”方法,因为当我尝试切换到该方法时,我的资源或资源列表都无法正确序列化。我发现HaloObjectMapper是序列化独立资源的工具。我使用@Qualifier获取对它的引用,并通过我的Jackson2ObjectMapperBuilder运行它,这解决了我的问题。。。现在。Spring Boot应该使用以下生成器为您配置HAL对象映射器:。如果这没有发生,那么你可能已经发现了一个错误,我会确认,看看我是否能深入了解它发生的原因。谢谢打开调试后,结果显示:“祖先'org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration$HypermediaConfiguration'不匹配(ConditionEvaluationReport.AncestorsMatchedCondition)”。这显然是因为LinkDiscoverers是在这里创建的:听起来你在应用程序中使用了
    @enablehpermedia
    。这将禁用SpringHateOAS的自动配置,包括其ObjectMapper的配置