Formateo De Fecha Con Jackson 1.7 y Spring MVC 3.1

De Dos Ideas.
Revisión del 16:03 30 may 2013 de Darkscythe (discusión | contribuciones) (Como testear nuestra configuración con MockMvc)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

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();

}