J'utilise @ResponseBody pour renvoyer un objet Json dans Spring MVC. Cela fonctionne comme prévu dans les versions 4.0.7 et 3.2.11, mais il renvoie le statut HTTP 406 lorsque j'essaie d'utiliser la dernière version Spring 4.1.1 (à la date du 10/16) sans autre modification de la configuration. Est-ce considéré comme un bug ou le 4.1.1 nécessite-t-il une configuration différente?
le dernier pot Jackson est déjà dans le classpath
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
L'exemple sur le printemps document fonctionne bien
@RequestMapping(value = "/something", method = RequestMethod.PUT)
@ResponseBody
public String helloWorld() {
return "Hello World";
}
lorsque le type de retour est String. Le problème se produit lorsque le type de retour est un POJO.
Maven pom.xml:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
et le fichier de configuration spring mvc (par exemple: spring-mvc.xml)
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
Il a fonctionné après avoir supprimé Jackson 1. * en le remplaçant par le 2.4.4 (JAXRS), qui importera toutes les autres dépendances, jackson-core, jackson-databind et jackson-annotations.
Supprimé
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
Ajouté
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-base</artifactId>
<version>2.4.4</version>
</dependency>
http://www.codingpedia.org/AMA/jquery-ui-autocomplete-not-working-in-spring-4-1/
et dans le servlet xml
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" />
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false" />
<property name="favorParameter" value="true" />
<property name="mediaTypes" >
<value>
json=application/json
xml=application/xml
</value>
</property>
</bean>
si l'annotation jackson est importée dans les fichiers de classe, elle doit également être remplacée
Supprimé
importer org.codehaus.jackson.annotate.JsonIgnoreProperties
Ajouté
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
Je me débattais avec un problème similaire lors de la migration du 3.2 au printemps 4.2.
posté ici pour que les gens puissent le trouver par nom d'exception :) Il m'a fallu une demi-journée pour trouver cet article. Merci @Vito et @Aias
La combinaison des deux réponses précédentes fonctionne également. Si vous ne souhaitez pas enregistrer la variable contentNegotiationManager
personnalisée, vous pouvez procéder comme suit:
supprimer toutes les dépendances jackson de
et utiliser le dernier
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-base</artifactId>
<version>2.6.1</version>
</dependency>
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>