2017-02-10 151 views
1

我想从AbstractEndpoints衍生端点使用不同杰克逊ObjectMapper实例(而不是其他映射URL中使用的一个)。使用自定义映射杰克逊

为了澄清的问题,我不想改变或定制其用于通过不同的URL从AbstractEndpoints(如HealtEndpointMetricsEndpoint)衍生的那些对象映射器。我想特别注入新的对象映射到管理端点。

+0

定义一个自定义的'@ Bean'不适合你吗?请参阅https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper。 – aha

+0

欢迎来到Stack Overflow!请参考[游览](http://stackoverflow.com/tour),环顾四周,阅读[帮助中心](http://stackoverflow.com/help),特别是[我该如何问一个好问题?](http://stackoverflow.com/help/how-to-ask)和[我可以问什么问题?](http://stackoverflow.com/help/on-topic)。 –

回答

1

如果您想要完全替换默认的ObjectMapper,请定义该类型的@Bean并将其标记为@Primary,或者,如果您更喜欢基于构建器的方法,请定义一个Jackson2ObjectMapperBuilder @Bean。请注意,在任何情况下,这将禁用ObjectMapper的所有自动配置。

如果您提供了MappingJackson2HttpMessageConverter类型的任何@Beans,则它们将替换MVC配置中的默认值。此外,还提供了一个便捷Bean,其类型为HttpMessageConverters(如果使用默认MVC配置,则始终可用),该Bean有一些有用的方法来访问缺省和用户增强的消息转换器。

可以读取文档中的全部话题:73.3定制杰克逊ObjectMapper

https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-customize-the-jackson-objectmapper

+0

不幸的是,它不能解决我的问题。当我在我的问题中添加了一些额外的信息时,我需要另一个对象映射器bean,专门用于从AbstractEndpoints派生的管理端点。 – cenkakin

0

在Spring启动1.5的,你可以自定义JMX端点使用,但不是在方式ObjectMapper你要。例如,您可以在constructor of EndpointMBean中看到,它将ObjectMapper作为参数,但没有任何qualifiers。因此,它会自动使用默认的ObjectMapper,除了更改原始资源或滚动自己的端点并添加必要的限定符外,您无能为力。

如果你仍然想使用由Spring启动提供的默认终结,定制根据您的需要默认ObjectMapper,创建原始配置相匹配的第二个实例,并添加预选赛在自己的代码使用第二ObjectMappercustomization options for Jackson's ObjectMapper are described in the Spring Boot docs也讨论了How to customise the Jackson JSON mapper implicitly used by Spring Boot?