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?
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.
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.
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/
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;
}
}
Um es klar zu sagen, Spring 3.1 hat Jackson 2 nicht nativ unterstützt
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 !!!