如何将jackson objectmapper dateformat配置添加到spring mvc config中?

时间:2012-10-27 09:44:22

标签: spring model-view-controller jackson

我有一个关于杰克逊2.1的问题。

我的pojo有一些日期属性,我想把它变成字符串,我把它设置在spring-servlet.xml中,但它没用。

我不喜欢在setter上使用@JsonSerialize(using = JsonDateSerializer.class)

这是我的配置:

<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property name="objectMapper">
        <bean class="com.fasterxml.jackson.databind.ObjectMapper">
            <property name="dateFormat">
                <bean class="java.text.SimpleDateFormat">
                    <constructor-arg type="java.lang.String" value="yyyy-MM-dd"></constructor-arg>
                </bean>
            </property>
        </bean>
    </property>
</bean>

2 个答案:

答案 0 :(得分:4)

假设您使用的是Spring 3.1,则应自定义mvc-annotation driven标记属性, 如图所示 Configuring ObjectMapper in Spring

假设你的bean声明是正确的,我认为它应该像

<mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
              <property name="objectMapper">
                 <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                     <property name="dateFormat">
                     <bean class="java.text.SimpleDateFormat">
                     <constructor-arg type="java.lang.String" value="yyyy-MM-dd"></constructor-arg>
                     </bean>
                     </property>
                 </bean>
              </property>
        </bean>
    </mvc:message-converters>

    </mvc:annotation-driven>

答案 1 :(得分:1)

我的设置是:                            

<!-- Date Format -->
<bean id="dateFormatter" class="java.text.SimpleDateFormat">
    <constructor-arg value="yyyy-MM-dd"/>
</bean>

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" ref="dateFormatter" />
    <property name="targetMethod" value="setTimeZone" />
    <property name="arguments">
        <list>
            <ref bean="timeZone"/>
        </list>
    </property>
</bean>
<!-- End Date Format -->

<!-- Jackson Object Mapper -->
<bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper"/>
 <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" ref="jacksonObjectMapper" />
    <property name="targetMethod" value="configure" />
    <property name="arguments">
        <list>
             <value type="org.codehaus.jackson.map.DeserializationConfig.Feature">FAIL_ON_UNKNOWN_PROPERTIES</value>
            <value>false</value>
        </list>
    </property>
</bean>

<bean id="jacksonDeserializationConfig" class="org.codehaus.jackson.map.DeserializationConfig" factory-bean="jacksonObjectMapper" factory-method="getDeserializationConfig" />

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" ref="jacksonDeserializationConfig" />
    <property name="targetMethod" value="setDateFormat" />
    <property name="arguments">
        <list>
            <ref bean="dateFormatter"/>
        </list>
    </property>
</bean>

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" ref="jacksonObjectMapper" />
    <property name="targetMethod" value="setDeserializationConfig" />
    <property name="arguments">
        <list>
           <ref bean="jacksonDeserializationConfig"/>
        </list>
    </property>
</bean>
<!-- End Jackson Object Mapper -->



<!-- JSON provider -->
<bean id="jsonRestProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider">
    <property name="mapper" ref="jacksonObjectMapper"/>
</bean>