Java Spring引导和ObjectMapper配置
使用SpringBoot1.2.2创建SpringMVC应用程序。我也在使用Spring HATEOAS 我遇到的问题是,当我的控制器方法返回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
列表时,配置的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。属性
参见classorg.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的配置