Jackson 2.0 con Spring 3.1

Spring MVC 3.1 è compatibile con Jackson 2.0? Il rilevamento automatico di Spring MVC sul classpath di Will Spring e la delega a Jackson per le richieste con un tipo di contenuto JSON funzionano ancora?

Il supporto per Jackson 2 è stato aggiunto alla Spring 3.2 e ha anche fatto il backport a Spring 3.1.2 ( SPR-9507 )

Keith Donald (di fonte spring) ha twittato il seguente un po ‘di tempo fa.

Spring MVC support per Jackson 2; funziona anche con la caratteristica “pretty print” nativa di Jackson https://gist.github.com/2423129

Non ho provato il MappingJackson2HttpMessageConverter trovato nel gist sopra ma mi sorprenderebbe se non funzionasse.

Dalla spring 3.1.2 devi semplicemente aggiungere il jar del database di jackson al tuo classpath.

In Maven puoi configurarlo in questo modo:

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

Il resto della magia verrà eseguito automaticamente dalla spring.

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

Per Spring 3.1.2 e Jackson 2 –

  • Come descritto sopra, il supporto automatico JustWorks ™

  • ma la configurazione no, poiché la maggior parte del web è disseminata di meccanismi di configurazione pre Spring3 / Jackson2

Quindi, per i posteri, elencherò un trucco (o è questo il modo ufficiale) per configurare il convertitore Jackson. In questo caso specifico, sto configurando il convertitore per restituire le date nel 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; } } 

Per essere chiari, Spring 3.1 non ha il supporto nativo per Jackson 2. È in spring 3.2

Non ho provato Spring MVC 3.1 compatibile con Jackson 2.0. Ma ho riscontrato un problema compatibile con 3.0.5. Infine trovo che Spring MVC 3.0.5 sia compatibile solo con Jackson 1.0.0, sicuramente Jackson 1.5.3 non è compatibile !!!