2017-02-10 121 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?