web-dev-qa-db-fra.com

Jackson 2.0 avec Spring 3.1

Spring MVC 3.1 est-il compatible avec Jackson 2.0? La détection automatique de Jackson par Spring MVC sur le chemin de classe et la délégation à Jackson pour les demandes avec un type de contenu JSON fonctionnent-elles encore?

28

La prise en charge de Jackson 2 a été ajoutée à Spring 3.2 et a également été rétroportée à Spring 3.1.2 ( SPR-9507 )

21

Keith Donald (de source printanière) a tweeté ce qui suit il y a quelque temps.

Prise en charge de Spring MVC pour Jackson 2; fonctionne également avec le natif de Jackson Fonction "joli imprimé" https://Gist.github.com/2423129

Je n'ai pas essayé le MappingJackson2HttpMessageConverter trouvé dans le Gist ci-dessus mais cela me surprendrait si cela ne fonctionnait pas.

22
Fredrik

Depuis Spring 3.1.2, vous devez simplement ajouter jackson-databind jar à votre chemin d'accès aux classes. 

Dans Maven, vous pouvez le configurer comme ceci:

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

Le reste de la magie se fera automatiquement au printemps.

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

17
Michael König

Pour le printemps 3.1.2 et Jackson 2 -

  • Comme indiqué ci-dessus, le support automatique JustWorks ™

  • mais la configuration ne fonctionne pas, car la plupart du Web est jonché de mécanismes de configuration pré-Spring3/Jackson2

Donc pour la postérité, je vais lister un hack (? Ou est-ce la manière officielle) de configurer le convertisseur de Jackson. Dans ce cas particulier, je configure le convertisseur pour renvoyer les dates au format 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;
    }
}
7
Manav

Pour être clair, Spring 3.1 n'a pas de support natif pour Jackson 2. C'est dans Spring 3.2

2
Marc

Je n'ai pas testé Spring MVC 3.1 compatible avec Jackson 2.0. Mais je rencontre un problème compatible 3.0.5. Enfin, je trouve que Spring MVC 3.0.5 est uniquement compatible avec Jackson 1.0.0, définitivement Jackson 1.5.3 n’est pas compatible !!!

0
malajisi