wake-up-neo.net

Jackson 2.0 mit Spring 3.1

Ist Spring MVC 3.1 mit Jackson 2.0 kompatibel? Funktioniert Spring MVCs automatische Erkennung von Jackson auf dem Klassenpfad und die Delegierung an Jackson für Anfragen mit einem JSON-Inhaltstyp weiterhin?

28

Unterstützung für Jackson 2 wurde im Frühjahr 3.2 hinzugefügt und wurde auch auf Frühjahr 3.1.2 ( SPR-9507 ) zurückgeführt.

21

Keith Donald (von Spring Source) twitterte vor einer Weile die folgende.

Spring MVC-Unterstützung für Jackson 2; arbeitet auch mit Jacksons Geburtsort Funktion "Hübsches Drucken" https://Gist.github.com/2423129

Ich habe den MappingJackson2HttpMessageConverter im Gist oben nicht ausprobiert, aber es würde mich überraschen, wenn es nicht funktioniert.

22
Fredrik

Seit Spring 3.1.2 müssen Sie einfach jackson-databind jar zu Ihrem Klassenpfad hinzufügen. 

In Maven kannst du es so konfigurieren:

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

Der Rest der Magie wird im Frühling automatisch ausgeführt.

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

17
Michael König

Für Frühling 3.1.2 und Jackson 2 -

  • Wie oben beschrieben, unterstützt die automatische JustWorks ™

  • die Konfiguration ist jedoch nicht der Fall, da der größte Teil des Webs mit Konfigurationsmechanismen vor Spring3/Jackson2 übersät ist

Für die Nachwelt werde ich einen Hack auflisten (oder ist dies der offizielle Weg), um den Jackson-Konverter zu konfigurieren. In diesem speziellen Fall konfiguriere ich den Konverter so, dass Datumsangaben im ISO-8601-Format zurückgegeben werden:

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;
    }
}
7
Manav

Um es klar zu sagen, Spring 3.1 hat Jackson 2 nicht nativ unterstützt

2
Marc

Ich habe Spring MVC 3.1 nicht mit Jackson 2.0 kompatibel getestet. Ich habe jedoch ein 3.0.5-kompatibles Problem. Endlich finde ich, dass Spring MVC 3.0.5 nur mit Jackson 1.0.0 kompatibel ist. Jackson 1.5.3 ist definitiv nicht kompatibel !!!

0
malajisi