Problème avec le Printemps 3 + JSON : HTTP statut 406?
Je vais essayer d'obtenir une liste des Villes en envoyant le nom de l'État par le biais de l'Ajax dans mon spring mvc 3.0 en projet.
Pour l'objectif, j'ai utilisé l'appel suivant (à l'aide de jQuery) dans ma page JSP:
<script type="text/javascript">
function getCities() {
jq(function() {
jq.post("getCities.html",
{ stateSelect: jq("#stateSelect").val()},
function(data){
jq("#cities").replaceWith('<span id="cities">Testing</span>');
});
});
}
</script>
Et voici mon code de Contrôleur:
@RequestMapping(value = "/getCities", method = RequestMethod.POST)
public @ResponseBody List<StateNames> getCities(@RequestParam(value="stateSelect", required=true) String stateName,
Model model) {
//Delegate to service to do the actual adding
List<StateNames> listStates = myService.listCityNames(stateName);
//@ResponseBody will automatically convert the returned value into JSON format
//You must have Jackson in your classpath
return listStates;
}
Mais je reçois HTTP 406 erreur indiquant que le suivant quand je le lance:
406 Not Acceptable
La ressource demandée n'est capable de générer un contenu qui ne sont pas acceptables selon l'Accepter en-têtes envoyés dans la requête.
J'ai utilisé Jackson dans mes dépendances Maven & avez défini dans mon fichier de contexte.
J'ai googlé largement & je crois que le problème est @ResponseBody n'est pas automatiquement la conversion de ma Liste appropriée objet JSON.
Mon Firebug dit:
Response Headers
Server Apache-Coyote/1.1
Content-Type text/html;charset=utf-8
Content-Length 1070
Date Sat, 12 Feb 2011 13:09:44 GMT
Request Headers
Host localhost:8080
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Accept */*
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Content-Type application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With XMLHttpRequest
Referer http://localhost:8080/MyApplication/
Content-Length 17
Cookie JSESSIONID=640868A479C40792F8AB3DE118AF12E0
Pragma no-cache
Cache-Control no-cache
Merci de me guider. Ce que je fais mal?? À l'AIDE!!
OriginalL'auteur Tonmoy Goswami | 2011-02-13
Vous devez vous connecter pour publier un commentaire.
Que Peter avait écrit dans son commentaire, la cause du problème est l'incapacité de Printemps à la charge de Jackson. Il n'est pas chargé par les dépendances par défaut. Après j'ai ajouté la dépendance
le JSON a été renvoyé après avoir tapé l'adresse dans le navigateur, sans toutes les astuces à Accepter les en-têtes (comme il est censé le faire).
Testé sur Tomcat 7.0.
OriginalL'auteur Danubian Sailor
Vous avez mauvaise réponse de type de contenu est-il censé être d'application/json.
Vous avez besoin d'ajouter de jackson à votre répertoire /lib de l'.
et vous devriez avoir
Dans votre serlvet-name.xml fichier.
En plus je vous recommande de faire un plan de votre demande que get et essayez de naviguer avec Google Chrome,pour voir si elle renvoie résultat correct. Il a une très bonne représentation json.
OriginalL'auteur danny.lesnik
Le problème n'est pas sur le côté serveur, mais sur le client.
Prendre un coup d'oeil à la message d'erreur soigneusement: La ressource demandée (généré par le serveur côté) est seulement capable de générer du contenu (JSON) n'est pas acceptable (par le client!) selon l'Accepter en-têtes envoyés dans la requête.
Examiner vos en-têtes de requête:
Essayer de cette façon:
Cela va changer votre en-tête Accept-ci (comme de jQuery 1.5):
Ce sera explicitement dire du côté serveur que vous attendez JSON.
OriginalL'auteur Ihor Kaharlichenko
À l'aide de jQuery , vous pouvez définir contentType à désirer (application/json; charset=UTF-8' ici) et de définir un même en-tête à côté serveur.
N'OUBLIEZ PAS DE VIDER LE CACHE LORS DES TESTS.
OriginalL'auteur user3055311
Moi aussi j'avais un problème similaire lors de l'utilisation de l'Apache HTTPClient pour appeler quelques-uns des services. Le problème, c'est le client et non sur le serveur. J'ai utilisé un HTTPRequester avec en-tête de l'acceptation de l'application/json et il a bien fonctionné.
Leçon apprise. Grâce Profond Sharma
OriginalL'auteur Zooter