如何使用XML Config使用MappingJackson2HttpMessageConverter设置自定义属性命名策略?

时间:2017-03-30 10:28:53

标签: java xml spring

我想为json定义一个自定义命名策略。我试图在spring-config.xml中配置不同的命名策略。我已将MappingJackson2HttpMessageConverter添加为带有自定义对象映射器的消息转换器:

<mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="com.insta.hms.common.ObjectHttpMessageConverter" />
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper" ref="jacksonObjectMapper" />
        </bean>   
        </mvc:message-converters>
    </mvc:annotation-driven>

我正在尝试为JacksonMessageConvertor定义一个对象映射器:

<bean id="jacksonObjectMapper" class ="com.fasterxml.jackson.databind.ObjectMapper">
    <property name = "PropertyNamingStrategy" value = "PropertyNamingStrategy.LOWER_CASE" />
</bean>

这不起作用; Spring说:无法将'java.lang.String'类型的值转换为属性'PropertyNamingStrategy'所需类型'com.fasterxml.jackson.databind.PropertyNamingStrategy'

所以我的最终目标是将propertyNamingStrategy的'value'替换为实现propertyNamingStrategy的自定义类。

我需要帮助使用XML配置进行配置。

2 个答案:

答案 0 :(得分:0)

当您指定属性value = "PropertyNamingStrategy.LOWER_CASE"时,Spring会将其作为String进行评估。你需要的是:

<bean id="jacksonObjectMapper" class ="com.fasterxml.jackson.databind.ObjectMapper">
    <property name = "propertyNamingStrategy" value = "#{T(com.fasterxml.jackson.databind.PropertyNamingStrategy).LOWER_CASE}" />
</bean>

此外,根据此question的答案,以下内容也是可能的:

<bean id="jacksonObjectMapper" class ="com.fasterxml.jackson.databind.ObjectMapper">
    <property name = "propertyNamingStrategy" value = "LOWER_CASE" />
</bean>

答案 1 :(得分:0)

查看C.2.2.1 found here(属性staticField)下的第三个代码块。名称需要完全合格。