2012-05-02 38 views
28

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?Jackson 2.0 con Spring 3.1

+2

Perché non dovrebbero? Hai provato e osservato che non funziona? –

+2

http://stackoverflow.com/questions/10085088/jackson-annotations-being-ignored-in-spring –

risposta

21

supporto per Jackson 2 è stato aggiunto nella primavera del 3.2, e ha anche backport alla primavera 3.1.2 (SPR-9507)

+2

Dovrai cambiare il tuo pom.xml se stai migrando da 1.x ('Passo 1: Aggiorna dipendenze Maven/JAR 'da http://www.cowtowncoder.com/blog/archives/2012/04/ entry_469.html è tutto ciò di cui hai bisogno per il supporto incorporato da aggancio) – Manav

22

Keith Donald (di fonte primavera) ha twittato il seguente un po 'di tempo fa.

Supporto MVC molla per Jackson 2; funziona anche con nativo caratteristica di Jackson "pretty print" https://gist.github.com/2423129

Non ho provato il MappingJackson2HttpMessageConverter trovato nel succo sopra, ma mi sorprenderebbe se non ha funzionato.

+5

Sì, funziona, hanno aggiunto la classe MappingJackson2HttpMessageConverter che deve essere utilizzata al posto del "vecchio" MappingJacksonHttpMessageConverter – emas

+0

Grazie ha funzionato per me – nilesh

2

Per essere chiari, Primavera 3.1 non ha il supporto nativo per Jackson 2. E 'nella primavera del 3,2

+10

Questo è stato aggiunto in 3.1.2. –

7

Per Spring 3.1.2 e Jackson 2 -

  • Come indicato sopra, le JustWorks sostegno automatico ™

  • ma la configurazione non lo fa, come la maggior parte del web è disseminato di pre meccanismi di configurazione Spring3/Jackson2

Così, per i posteri, ti elenco fuori un hack (? o è questo il modo ufficiale) per configurare il convertitore Jackson. In questo caso particolare, io sono la configurazione del convertitore di 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; 
    } 
} 
+0

Sono sicuro che non è il modo ufficiale ma è molto intelligente! –

+2

Il metodo "ufficiale" di configurazione di questo è descritto qui: http: //wallsofchange.wordpress.com/2013/02/02/primavera-MVC-riposo-servizi-forza-jackson-to-date serializzare-as-iso-8601-date /. L'unica differenza per Jackson 2 è che devi usare 'MappingJackson2HttpMessageConverter' invece di' MappingJacksonHttpMessageConverter' e 'SerializationFeature.WRITE_DATES_AS_TIMESTAMPS' invece di' SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS'. –

+0

@Ryan funziona alla grande – oers

17

Dalla primavera 3.1.2 è sufficiente aggiungere jackson-databind jar al classpath.

In Maven è possibile configurare in questo modo:

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>${jackson.version}</version> 
</dependency> 

Il resto della magia sarà fatto entro la primavera automaticamente.

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

+0

Man, stavo impazzendo fino a quando ho trovato questo. Grazie davvero! –

0

non ho la prova 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 !!!

Problemi correlati