J'essaye d'envoyer une requête POST à un servlet. La requête est envoyée via jQuery de cette manière:
var productCategory = new Object();
productCategory.idProductCategory = 1;
productCategory.description = "Descrizione2";
newCategory(productCategory);
où est newCategory
function newCategory(productCategory)
{
$.postJSON("ajax/newproductcategory", productCategory, function(
idProductCategory)
{
console.debug("Inserted: " + idProductCategory);
});
}
et postJSON est
$.postJSON = function(url, data, callback) {
return jQuery.ajax({
'type': 'POST',
'url': url,
'contentType': 'application/json',
'data': JSON.stringify(data),
'dataType': 'json',
'success': callback
});
};
Avec firebug, je vois que JSON est envoyé correctement:
{"idProductCategory":1,"description":"Descrizione2"}
Mais j'obtiens 415 type de support non pris en charge. Le contrôleur Spring mvc a une signature
@RequestMapping(value = "/ajax/newproductcategory", method = RequestMethod.POST)
public @ResponseBody
Integer newProductCategory(HttpServletRequest request,
@RequestBody ProductCategory productCategory)
Il y a quelques jours, cela fonctionnait, maintenant ce n'est pas le cas. Je montrerai plus de code si nécessaire. Merci
var productCategory = { idProductCategory: 1, description: "Descrizione2" };
plus concis et plus facile à lire? Avez-vous besoin de dire à Spring d'accepterapplication/json
spécifiquement? En d'autres termes, s'attend-il à ce que les données se présentent sous une forme?Réponses:
Cela s'est déjà produit avec Spring @ResponseBody et c'était parce qu'il n'y avait pas d'en-tête d'acceptation envoyé avec la demande. Accepter l'en-tête peut être difficile à définir avec jQuery, mais cela a fonctionné pour moi source
L'en-tête Content-Type est utilisé par @RequestBody pour déterminer le format des données envoyées par le client dans la demande. L'en-tête accept est utilisé par @ResponseBody pour déterminer le format dans lequel renvoyer les données au client dans la réponse. C'est pourquoi vous avez besoin des deux en-têtes.
la source
l'ajout du type de contenu dans la demande a
application/json
résolu le problèmela source
J'ai eu un problème similaire, mais j'ai trouvé que j'avais négligé de fournir un constructeur par défaut pour le DTO qui était annoté avec @RequestBody.
la source
Je crois que j'ai rencontré exactement le même problème. Après d'innombrables heures de combat avec le JSON, le JavaScript et le serveur, j'ai trouvé le coupable: dans mon cas, j'avais un objet Date dans le DTO, cet objet Date a été converti en String afin que nous puissions l'afficher dans la vue avec le format: HH: mm.
Lorsque les informations JSON étaient renvoyées, cet objet Date String devait être reconverti en un objet Date complet, nous avons donc également besoin d'une méthode pour le définir dans le DTO. Le gros MAIS est que vous ne pouvez pas avoir 2 méthodes avec le même nom (surcharge) dans le DTO même si elles ont un type de paramètre différent (chaîne vs date) car cela vous donnera également l'erreur de type 415 Unsupported Media.
C'était ma méthode de contrôleur
C'était mon exemple DTO (les méthodes id get / set et preAlarm get ne sont pas incluses pour la brièveté du code):
Pour que tout fonctionne, vous devez supprimer la méthode avec le paramètre de type Date. Cette erreur est très frustrante. J'espère que cela peut sauver quelqu'un des heures de débogage.
la source
public void setParameters(List<Parameter> parameters)
&public void setParameters(Parameter... parameters)
dans un bean, changeant cette dernière pouraddParameters
résoudre le problème pour moi.J'ai rencontré un problème similaire et c'est ainsi que je l'ai résolu,
Le problème est dû au processus de conversion de JSON à Java, il faut avoir les bonnes bibliothèques jackson d'exécution pour que la conversion se déroule correctement.
Ajoutez les fichiers JAR suivants (via une dépendance ou en téléchargeant et en ajoutant au classpath.
Cela devrait résoudre le problème.
Code complet:
et la signature du contrôleur ressemble à ceci:
J'espère que cela t'aides
la source
jackson-databind
est requis.J'ai rencontré ce problème lorsque j'ai intégré la botte à ressort avec Spring mvc. Je l'ai résolu en ajoutant simplement ces dépendances.
la source
Une petite note latérale - est tombé sur cette même erreur lors du développement d'une application Web. L'erreur que nous avons trouvée, en jouant avec le service avec Firefox Poster, était que les champs et les valeurs du Json devaient être entourés de guillemets. Par exemple..
Dans notre cas, nous avons rempli le json via javascript, ce qui peut être un peu déroutant lorsqu'il s'agit de traiter les guillemets simples / doubles, d'après ce que j'ai entendu.
Ce qui a déjà été dit dans cet article et dans d'autres, comme inclure les en-têtes `` Accepter '' et `` Type de contenu '', s'applique également.
Hope t'helps.
la source
J'ai réussi à le faire fonctionner. Dites-moi au cas où je me trompe. J'ai utilisé une seule façon de sérialiser / désérialiser: j'ai supprimé toutes les annotations concernant ceci (
@JSONSerialize
et@JSONDeserialize
) et enregistré les sérialiseurs et désérialiseurs enCustomObjectMapper
classe. Je n'ai pas trouvé d'article expliquant ce comportement mais j'ai résolu de cette manière. J'espère que c'est utile.la source
J'ai eu le même problème. J'ai dû suivre ces étapes pour résoudre le problème:
1. Assurez-vous que vous disposez des dépendances suivantes:
2. Créez le filtre suivant:
3. Appliquez le filtre ci-dessus pour les demandes dans web.xml
J'espère que cela sera utile à quelqu'un.
la source
jackson-core
est une dépendance dejackson-databind
, donc pas besoin de l'ajouter directement.Botte à ressort + ressort MVN
avec problème
avec solution
la source
J'ai résolu ce problème en ajoutant la liaison de données jackson-json à mon pom.
la source
Dans votre classe de modèle, ajoutez une annotation de propriété json, disposez également d'un constructeur par défaut
la source
J'ai eu le même problème. ajouter
au printemps-xml l'a résolu
la source
1.a. Ajouter suivant dans applicationContext-mvc.xml
xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemaLocation = " http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc
la source