2012-05-18 10 views
28

私は、純粋なxml beanではなく注釈によってSpring Beanを設定するのには不合理でしたが、今私はその結果に直面しています。Springアノテーションベースのコンフィグレーションを使用しているときにMappingJacksonHttpMessageConverterをコンフィグレーションする方法は?

私は

<mvc:annotation-driven /> 

を使用RESTチャンネルを設定するには、今、私は単純にJSONに出力する非NULL値を持っているだけこのフィールドをMappingJacksonHttpMessageConverterを設定します。私は以下を試しました:

コンバーターの別のインスタンスが作成され、チャネルで使用されます。だから私はthis Stackoverflow questionに記載されている@Configuration@Beanで方法を試しましたが、それでもjsonのシリアル化は独自の設定を使用しています。

は最後に、私は

@Autowired 
private MappingJacksonHttpMessageConverter jacksonConverter; 

経由マッパーを注入しようとしましたが、私はNoSuchBeanDefinitionExceptionで終了しました。だから私はオプションがありませんので、私はここに任意のアイデアを求めています。フレームワークが使用するマッパーを制御して設定するには?

+0

が有線フィールド@Autowired プライベートMappingJacksonHttpMessageConverter jsonHttpMessageConverter 'ように' jsonHttpMessageConverter'の名前を変更してみてください参照してください; ' –

答えて

55

WebMvcConfigurer.configureMessageConverters()方法使用します。[...]

を使用するHttpMessageConvertersの設定をメッセージ・コンバータがリストに追加されていない場合、デフォルトのコンバータが代わりに追加されます。 @Configuration

あなたがしている:カスタム・コンバータを使用した場合のデフォルト値が適用されないためaddDefaultHttpMessageConverters()

@Configuration 
class MvcConf extends WebMvcConfigurationSupport { 
    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
     converters.add(converter()); 
     addDefaultHttpMessageConverters(converters); 
    } 

    @Bean 
    MappingJacksonHttpMessageConverter converter() { 
     MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter() 
     //do your customizations here... 
     return converter; 
    } 
} 

コールが必要です。

IMPORTANT NOTEあなたはWebMvcConfigurationSupportを拡張する場合に構成するためにあなたのコンバータの@EnableWebMvcを削除する必要があります。

+1

はまだ、私の場合には、MappingJacksonHttpMessageConverterの唯一の別のインスタンスを作成し、それれます後で使用されるものではありません –

+1

あなたのコンバータをデフォルトのものから追加する順番に依存するようです。上記のように私自身のコンバータを最初に追加すると、それは私のために働く。 – user405935

+0

また、**バージョン**は互換性がなければならないことを忘れないでください。私は春4を使用しています*。そして私はジャクソン1とそれをセットアップするために何時間も努力しました。* - うまくいきませんでした。それから、私は、アーティファクトをcom.fasterxml.jackson.coreに変更しました.Jasckson 2のjackson-databind。*。依存関係を変更しました - > configureMessageConvertersなしの)魅力的なように働いた – pkopac

25

のみJavaコードでスプリングMVCサーブレット構成のカスタマイズは、複数の方法で達成することができます。

最も簡単な1はWebMvcConfigurerAdapterであなたの@Configuration注釈付きクラスを拡張しているようだ。これは多くのトマシュNurkiewiczの答えによって提供された例のようなものであることを

@Configuration 
@EnableWebMvc 
public class ApplicationSpringConfig extends WebMvcConfigurerAdapter { 
    @Override 
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
     converters.add(converter()); 
    } 

    @Bean 
    MappingJackson2HttpMessageConverter converter() { 
     // [...] 
    } 
} 

注意してください。

しかしWebMvcConfigurationSupport代わりのWebMvcConfigurerAdapterを使用すると、高度なカスタマイズのためのより適切です。あなたは、デフォルトのコンバータを追加するために必要であればそれはそうでした。

春のドキュメントCustomizing the Provided Configuration

+0

受け入れられた答えよりも完全な答えです。 –

+2

'converter()'メソッドに '@Bean'というマークを付ける必要があるのはなぜですか? –

+1

JavaDoc:コンバータをリストに追加すると、デフォルトのコンバータ登録が無効になります。既定の登録に影響を与えずに単にコンバータを追加するには、代わりにextendMessageConverters(java.util.List)メソッドを使用することを検討してください。 – xedo

関連する問題