2017-09-19 15 views
1

次のように私は、私自身のjacksonObjectMapper Beanを作成したい:springbootでJackson2ObjectMapperBuilderを強制するには?

@SpringBootApplication 
@AutoConfigureBefore(JacksonAutoConfiguration.class) //even this does not help 
public class MyConfig extends SpringBootServletInitializer { 
    @Bean 
    @Primary 
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { 
     return builder.createXmlMapper(true).build(); //much more configurations 
    } 
} 

問題:Beanが作成されることはありませんが、代わりにデフォルトJacksonAutoConfigurationが実行されます。

package org.springframework.boot.autoconfigure.jackson; 

@Configuration 
@ConditionalOnClass(ObjectMapper.class) 
public class JacksonAutoConfiguration { 
     @Bean 
     @Primary 
     @ConditionalOnMissingBean(ObjectMapper.class) 
     public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { 
      return builder.createXmlMapper(false).build(); //this is always executed! 
     } 
} 

だから、何とかObjectMapper BeanをJacksonAutoConfigurationが評価されたときにはまだ存在しません。しかし、なぜ?

ブレークポイントでデバッグすると、私のbeanがでないことがわかりますが呼び出されました! しかし、私が気づいたのは、@AutoConfigureBeforeがあるにもかかわらず、の前にのいずれかがまだMyConfigに入っています。不思議ですか?

+0

明確にするために、デバッガのブレークポイントをそこに配置しましたが、呼び出されることはありません。 – Andremoniy

+0

正確には、私の 'ObjectMapper' beanは完全に無視されています(これは同じ' MyConfig'クラス内の他のすべてのBeanには当てはまりません)。 – membersound

+0

あなたの質問にもっとコンテキストを提供できますか?あなたのアプリケーションをJAR、戦争、あなたのIDEの中で実行していますか、それとも何か他のもの?その主な方法は、それがあればどのように見えますか?[最小、完全、 –

答えて

1

カスタマイズObjectMapperためのSpringのドキュメントは、これは、それが言うことであるHere's

あなたはObjectMapper完全にデフォルトを交換したい場合は、どちらか があれば、その種類の@Beanを定義し、@Primaryとしてそれをマークし、またはあなたは ビルダーベースのアプローチを好む、Jackson2ObjectMapperBuilderを定義する @Bean。どちらの場合も、ObjectMapperの自動構成はすべて無効になります。

ObjectMapper beanを定義しても役に立たない場合は、Jackson2ObjectMapperBuilder beanを代わりに定義できますか?

さらに、豆を@Configurationと注釈を付けたクラスに定義してみることができますか?

+0

Bean定義を自分自身の '@Configuration'クラスに移動しなければならなかったことが判明しました。メインのSpringBootApplicationクラスでスキップされた理由はわかりません。 – membersound

+0

おそらく' @ SpringBootApplication'は '@Configuration'アノテーション/インタフェースを拡張していませんが、とにかくそれがあなたを助けてくれたら、受け入れられたとマークすることができます。 –

関連する問題