3

I have a problem about jackson 2.1.

My pojo have some date properties, I want turn it to string, I setted it in spring-servlet.xml but it's not usefull.

I don't like use @JsonSerialize(using = JsonDateSerializer.class) on the setter.

this is my configuration:

<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>
Alessandro Minoccheri
  • 35,521
  • 22
  • 122
  • 171
Alvin Ge
  • 31
  • 1
  • 1
  • 2

2 Answers2

4

Assuming you are using Spring 3.1, you should customize your mvc-annotation driven tag properties, as is shown in Configuring ObjectMapper in Spring

Assuming that your bean declaration is correct I think it should be something like

<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>
Community
  • 1
  • 1
Boris Treukhov
  • 17,493
  • 9
  • 70
  • 91
2

My setup is:

<!-- 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>