31

私は、純粋な xml Bean ではなく、注釈を介して Spring Bean を構成するのに十分なほど不合理であり、今、その結果に直面しています。

を使用してRESTチャネルを構成します

<mvc:annotation-driven />

MappingJacksonHttpMessageConverterここで、null 以外の値を持つこのフィールドのみを JSON に出力するように構成するだけです。私は次のことを試しました:

<bean id="jsonHttpMessageConverter"
    class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    <property name="prefixJson" value="false" />
    <property name="supportedMediaTypes" value="application/json" />
    <property name="objectMapper">
        <bean class="org.codehaus.jackson.map.ObjectMapper">
            <property name="serializationInclusion" value="NON_NULL"/>
        </bean>
    </property>
</bean>

Bean は作成されますが、コンバーターの別のインスタンスが作成され、チャネルで使用されます。そのため、この Stackoverflow questionで方法を試して@Configuration説明@Beanしましたが、まだ json シリアル化は独自の構成を使用しています。

最後に、マッパーを挿入しようとしました

@Autowired
private MappingJacksonHttpMessageConverter jacksonConverter;

しかし、私はで終わりましたNoSuchBeanDefinitionException。だから今、私は選択肢がなくなったので、ここでアイデアを求めています。フレームワークで使用されるマッパーを制御および構成する方法は?

4

3 に答える 3

63

WebMvcConfigurer.configureMessageConverters()次の方法を使用します。

[...] を使用するように HttpMessageConverters を構成します。リストにメッセージ コンバーターが追加されていない場合は、代わりに既定のコンバーターが追加されます。

あなた@Configurationが持っている:

@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;
    }
}

addDefaultHttpMessageConverters()カスタム コンバーターを使用する場合は既定値が適用されないため、への呼び出しが必要です。

重要な注意@EnableWebMvcWebMvcConfigurationSupport を拡張する場合は、コンバーターを構成するために 削除する必要があります。

于 2012-05-18T09:55:46.583 に答える