Formateo De Fecha Con Jackson 1.7 y Spring MVC 3.1
Formato customizado de fecha
En caso de querer definir el formato de fecha del lado del servidor cuando se utiliza Jackson y Spring MVC , se puede realizar utilizando la siguiente configuración.
<bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper"/>
<bean id="jacksonSerializationConfig" factory-bean="jacksonObjectMapper" factory-method="getSerializationConfig"/>
<bean id="jacksonSerializationConfigMethodInvokingFactoryBean" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetObject" ref="jacksonSerializationConfig" /> <property name="targetMethod" value="setDateFormat" /> <property name="arguments"> <list> <bean class="java.text.SimpleDateFormat"> <constructor-arg type="java.lang.String" value="dd/MM/yyyy"></constructor-arg> </bean> </list> </property> </bean>
<mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="objectMapper" ref="jacksonObjectMapper" /> </bean> </mvc:message-converters> </mvc:annotation-driven>
Formato ISO-8601
Para utilizar este formato que Jackson trae como default, se requiere una configuración un poco más rebuscada.
<bean name="jacksonObjectMapper" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject">
<bean class="org.codehaus.jackson.map.ObjectMapper" />
</property>
<property name="targetMethod" value="configure" />
<property name="arguments">
<list>
<util:constant static-field="org.codehaus.jackson.map.SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS"/>
<util:constant static-field="java.lang.Boolean.FALSE"/>
</list>
</property>
</bean>
<mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="objectMapper" ref="jacksonObjectMapper" /> </bean> </mvc:message-converters> </mvc:annotation-driven>
Como testear nuestra configuración con MockMvc
En caso de que estemos utilizando MockMvcBuilders para testear y estemos utilizando standaloneSetup ya que no podemos/queremos cargar todo el contexto por algún motivo, podemos testear de la siguiente manera.
private MockMvc mockMvc;
@Autowired private RequestMappingHandlerAdapter requestMappingHandlerAdapter;
@Before public void setUp() { List<HttpMessageConverter<?>> messageConverters = requestMappingHandlerAdapter.getMessageConverters(); HttpMessageConverter<?>[] messageConvertersArray = messageConverters.toArray(new HttpMessageConverter<?>[messageConverters.size()]);
mockMvc = MockMvcBuilders.standaloneSetup(instancia).setMessageConverters(messageConvertersArray).build();
}