Jackson 2.0 con Spring 3.1

¿Spring MVC 3.1 es compatible con Jackson 2.0? ¿La detección automática de Spring MVC de Jackson en el classpath y la delegación a Jackson para solicitudes con un tipo de contenido JSON aún funcionan?

El soporte para Jackson 2 se ha agregado en Spring 3.2, y también se ha transferido a Spring 3.1.2 ( SPR-9507 )

Keith Donald (de fuente de spring) tuiteó a los siguientes hace un tiempo.

Soporte Spring MVC para Jackson 2; también funciona con la característica nativa de “bonita impresión” de Jackson https://gist.github.com/2423129

No he probado el MappingJackson2HttpMessageConverter encuentra en la parte superior, pero me sorprendería si no funciona.

Desde Spring 3.1.2 simplemente tienes que agregar el jar de jack-databind a tu classpath.

En Maven puedes configurarlo así:

  com.fasterxml.jackson.core jackson-databind ${jackson.version}   com.fasterxml.jackson.core jackson-core ${jackson.version}  

El rest de la magia se realizará por resorte automáticamente.

Ver: http://norrisshelton.wordpress.com/2012/07/15/spring-3-mvc-with-json-via-jackson-2-0/

Para Spring 3.1.2 y Jackson 2 –

  • Como se describió anteriormente, el soporte automático JustWorks ™

  • pero la configuración no lo hace, ya que la mayoría de la red está llena de mecanismos de configuración pre Spring3 / Jackson2

Entonces, para la posteridad, voy a enumerar un truco (¿o es la forma oficial) para configurar el convertidor Jackson? En este caso particular, estoy configurando el convertidor para que devuelva las fechas en el formato ISO-8601:

 package foo.bar.JacksonConfig; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.stereotype.Component; @Component public class JacksonConfig implements BeanPostProcessor { public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof MappingJackson2HttpMessageConverter) { MappingJackson2HttpMessageConverter jsonConverter = (MappingJackson2HttpMessageConverter) bean; ObjectMapper objectMapper = jsonConverter.getObjectMapper(); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); jsonConverter.setObjectMapper(objectMapper); } return bean; } } 

Para que quede claro, Spring 3.1 no tiene soporte nativo para Jackson 2. Está en Spring 3.2

No probé Spring MVC 3.1 compatible con Jackson 2.0. Pero encuentro un problema compatible con 3.0.5. Finalmente, me parece que Spring MVC 3.0.5 solo es compatible con Jackson 1.0.0, ¡definitivamente Jackson 1.5.3 no es compatible!