我想在从 AbstractEndpoints 派生的端点上使用不同的jackson ObjectMapper 实例(而不是在其他映射网址上使用的实例)。
为了澄清这个问题,我不想更改或自定义不同网址使用的对象映射器,而不是来自 AbstractEndpoints 的对象映射器(如 HealtEndpoint , MetricsEndpoint )。我想专门将新的对象映射器注入管理端点。
答案 0 :(得分:1)
如果要完全替换默认的ObjectMapper,请定义该类型的@Bean并将其标记为@Primary,或者,如果您更喜欢基于构建器的方法,请定义Jackson2ObjectMapperBuilder @Bean。请注意,在任何一种情况下,这都将禁用`ObjectMapper。
的所有自动配置如果您提供任何类型为MappingJackson2HttpMessageConverter的@Beans,那么它们将替换MVC配置中的默认值。此外,还提供了类型为HttpMessageConverters的便捷bean(如果使用默认的MVC配置,则始终可用),它具有一些有用的方法来访问默认和用户增强的消息转换器。
您可以阅读文档中的完整主题:73.3自定义Jackson ObjectMapper
答案 1 :(得分:0)
从Spring Boot 1.5开始,您可以自定义JMX端点正在使用的ObjectMapper
但不是您想要的方式。正如您在constructor of EndpointMBean
中看到的那样,它需要ObjectMapper
作为参数,但没有任何qualifiers。因此它会自动使用默认的ObjectMapper
,除了更改原始源或滚动自己的端点并添加必要的限定符之外,您无能为力。
如果您仍想使用Spring Boot提供的默认端点,请根据需要自定义默认端点ObjectMapper
,创建与原始配置匹配的第二个实例,并添加限定符以使用第二个{{1在你自己的代码中。 customization options for Jackson's ObjectMapper
are described in the Spring Boot docs并在How to customise the Jackson JSON mapper implicitly used by Spring Boot?中进行了讨论。