2012-05-02 18 views
28

Czy Spring MVC 3.1 jest kompatybilny z Jackson 2.0? Czy Spring MVC automatycznie wykryje Jacksona na ścieżce klasowej, a delegacja do Jacksona na żądania z typem zawartości JSON nadal działa?Jackson 2.0 ze Spring 3.1

+2

Dlaczego by nie mieli? Czy próbowałeś i zauważyłeś, że to nie działa? –

+2

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

Odpowiedz

21

Wsparcie Jackson 2 został dodany w Spring 3.2, a także przeniesione na wiosenną 3.1.2 (SPR-9507)

+2

Musisz zmienić swój plik pom.xml, jeśli przeprowadzasz migrację z wersji 1.x ('Krok 1: zaktualizuj zależności Maven/JAR 'z http://www.cowtowncoder.com/blog/archives/2012/04/ entry_469.html jest wszystkim, czego potrzebujesz do wbudowanego wsparcia, aby się zatrzasnąć) – Manav

22

Keith Donald (z źródła wiosennego) napisał tweeta po chwili.

Obsługa Spring MVC dla Jacksona 2; współpracuje również z Jacksona rodzimej „Pretty druku” cecha https://gist.github.com/2423129

ja nie próbowałem MappingJackson2HttpMessageConverter znaleźć w GIST powyżej ale to dziwi mnie, jeśli to nie działa.

+5

Tak, działa, dodali klasę MappingJackson2HttpMessageConverter, która ma być używana zamiast "starego" MappingJacksonHttpMessageConverter – emas

+0

Dzięki, że pracował dla mnie – nilesh

2

Żeby było jasne, wiosna 3.1 nie posiada natywne wsparcie dla Jacksona 2. To wiosną 3,2

+10

Zostało to dodane w 3.1.2. –

7

na wiosnę 3.1.2 i Jackson 2 -

  • Jak wspomniano powyżej, w automatycznej JustWorks pomocy ™

  • ale konfiguracja nie, jak większość sieci jest pełno gotowych mechanizmów konfiguracyjnych Spring3/Jackson2

Tak dla potomności, będę się lista hack (? lub czy to jest oficjalny sposób), aby skonfigurować konwerter Jackson. W tym konkretnym przypadku, jestem konfiguracji konwertera, aby powrócić daty w formacie 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

Jestem pewien, że nie jest to oficjalna metoda, ale jest bardzo sprytna! –

+2

"Oficjalna" metoda konfiguracji jest opisana tutaj: http: //wallsofchange.wordpress.com/2013/02/02/spring-mvc-rest-services-force-jackson-serialize-dates-as-iso-8601-dates /. Jedyną różnicą w Jackson 2 jest użycie 'MappingJackson2HttpMessageConverter' zamiast' MappingJacksonHttpMessageConverter' oraz 'SerializationFeature.WRITE_DATES_AS_TIMESTAMPS' zamiast' SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS'. –

+0

@Ryan to działa świetnie – oers

17

od wiosny 3.1.2 po prostu trzeba dodać Jackson-databind słoik na ścieżce klas.

W Maven można skonfigurować go tak:

<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> 

Reszta magii zostaną wykonane automatycznie przez sprężynę.

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

+0

Człowieku, szaleję, aż to znalazłem. Naprawdę dzięki! –

0

nie testowałem MVC wiosny 3.1 kompatybilny z Jackson 2.0. Ale napotykam problem kompatybilny z 3.0.5. Wreszcie uważam, że Spring MVC 3.0.5 jest kompatybilny tylko z Jackson 1.0.0, zdecydowanie Jackson 1.5.3 nie jest kompatybilny !!!

Powiązane problemy