Spring Json ne pas être résolu avec une réponse appropriée
J'ai essayé d'avoir un contrôleur au Printemps de retourner une réponse JSON en vain l'aide de l'Jackson classes recommandé avec la version 3.0. J'ai l'jackson fichiers jar(jackson-core-asl-1.5.5.jar & jackson-mapper-asl-1.5.5.jar) dans mon chemin de classe de cours.
Comme pour l'appconfig.xml entrées, je ne suis pas sûr que j'ai besoin de ces. Je les ai mis là comme un dernier acte de désespoir, avant de revenir à l'ol de mode non-json, ajax.
En debug, je regarde le contrôleur obtenir la demande, de retour de la foo et puis, dans firebug, obtenir une 406.
Les messages d'erreur sont comme suit:
À partir de l'enregistreur lorsque la valeur de débogage:
org.springframework.web.HttpMediaTypeNotAcceptableException: impossible de trouver représentation acceptable
De la réponse:
(406) La ressource identifiée par cette demande est seulement capable de générer des réponses avec des caractéristiques pas acceptable en fonction de la demande "accepter" en-têtes (headers).
Mon appconfig.xml c'est ici:
<!-- Configures support for @Controllers -->
<mvc:annotation-driven />
<!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="html" value="text/html"/>
<entry key="json" value="application/json"/>
</map>
</property>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</list>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
</bean>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages"></property>
</bean>
Mon contrôleur
@RequestMapping(value="foo/bar", method=RequestMethod.GET)
public @ResponseBody foo getFoo(@RequestParam String fooId) {
return new foo(fooId);
}
Sur la jsp, où l'appel ajax est fait:
function addRow() {
$.getJSON("foo/bar",{ fooId: 1} , function(data) {
alert("it worked.");
});
}
Laissez-moi savoir si il y a plus d'infos à ce qui est nécessaire.
source d'informationauteur ClutchDude
Vous devez vous connecter pour publier un commentaire.
Se débarrasser de tous les Jackson haricots, et de le json de la cartographie dans les négociations de résolution. le
mvc:annotation-driven
devez configurer tout ce dont vous avez besoin pour l'Jackson sérialisation de travail.J'ai eu cette erreur deux fois maintenant.
Seulement maintenant, j'ai ajouté des getters pour mon pojo. La 406 erreur a disparu et j'ai eu JSON comme prévu.
Je suppose que parce que mes champs ont été package protégé (l'accès par défaut), il conviendrait de les attraper, mais je ne crois pas.
Pour mémoire, en cas de questions, j'ai aussi fait un POJO Sérialisable, toString(), serialVersionUID, pas-arg constructeur, et explicite les constructeurs.
L'avant de temps j'ai nettoyé/autorisés/rafraîchis mon Tomcat cache et n'importe quoi d'autre pour le forcer à recharger. Je crois que quand j'ai ajouté le Jackson dépendances, il fixe mon moment de la compilation des erreurs, mais depuis tomcat manqués, au moment de l'exécution Spring MVC n'a pas de découvrir la ville de Jackson et les bibliothèques, et produit la 406 erreur inacceptable type de réponse.
Aussi, assurez-vous que vous ajoutez deux jackson liées fichiers jar.
jackson-core-asl-1.9.8.jar
jackson-mapper-asl-1.9.8.jar
La version peut être différente.
Je sais que c'est un vieux thread, mais peut-être que quelqu'un va rencontrer le même problème que moi. J'ai obtenu une exception lors de la migration d'une application à partir du Printemps 4.0.3.La LIBÉRATION de Printemps 4.1.0.La LIBÉRATION. Dans mon cas, la mise à jour de Jackson à partir de 1.9.x 2.4.x a fait le tour.
L'envoi de l'en-tête Accept: application/xml-tête ne fonctionne pas. Mais l'envoi de Accept: application/json fonctionne réellement, et jackson mappeur de coups de pied dans. Je me suis débarrassé de ma 406 et j'ai obtenu mon java sérialisé objet au format json avec pas plus de config que @ResponseBody et return new Monobjet()
🙂
Grâce skaffman pour cette information, et grâce Bozho pour la valeur d'en-tête 😀
Cette question apparaît partout sur le net et je me suis mordu par un couple de fois. Printemps 3.0.6 (et 5 peut-être) a quelques problèmes dans le rendu de json. Une fois que j'ai changé pour 3.1.0.Version eveyrything travaillé COMME EST. Sans les modifications de configuration. Choses à noter, le retour de la méthode doit avoir @ResponseBody (comme dans l'exemple précédent) et doit être en servlet-context.xml ou votre printemps contexte fichier de configuration.
J'ai même exception lors de la migration de printemps 3.x à ressort 4.x.
Je l'ai résolu avec la mise à jour de jackson dépendances de
à
Rien d'autre n'a été nécessaire pour moi.
Peut-être que ma réponse est un peu tardive, mais il peut aider quelqu'un d'autre la visite de cette question.
J'ai obtenu mon problème résolu en ajoutant
et m'a donné une autre exception (classe pas trouvé exception: org.slf4j.LoggerFactory) que j'ai résolu en ajoutant
J'espère que ça aidera quelqu'un.