J'essaie de comprendre pourquoi je ne peux pas recevoir de demande d'un appel JQuery.ajax lorsque, puis Spring html / javascript strud>: p> java strong>: p> Ce qui précède échouera avec le Pourquoi est-ce le cas? Une requête code> post code> inclut les données dans le corps de la demande. Ce n'est pas le processus d'annotation une telle demande? P> Je me rendrais compte que je pourrais changer le type de contenu envoyé par le JavaScript vers @Controller Code> La méthode du gestionnaire comprend un @Requestbody code> Annotation. Considérons les suivants: @Requestbody code> Annotation Prière et renvoyer une erreur 415 (aucune exception ne sera générée). Mais si l'annotation code> @Requestbody code> est supprimée (c'est-à-dire que la signature du paramètre est juste formdataObject formdata code>) puis la méthode sera appelée et JSON sera renvoyé à la JavaScript. P > Application / JSON CODE> et le Consumes Code > Propriété à mediatype.application_json_value code> pour que l'annotation fonctionne correctement. Mais pourquoi ne fonctionne-t-il pas avec une demande de forme normale? P>
3 Réponses :
Avez-vous essayé de changer de journalisation sur 'org.springframework.web' pour trouver la raison du code d'état retourné? Il devrait y avoir une exception élevée et connectée avant qu'elle ne soit traduite à un 415. P>
De plus, si vous envoyez des données de formulaire, pourquoi ne pas simplement laisser le @requestbody. Vous utiliserez ensuite une liaison de données (I.E. @modelattribute) qui appliqueront des paramètres de demande de servlet aux champs d'objet. Ceci est préférable à utiliser le formhttpmessagecverter. P>
Allumer la journalisation montre qu'avec le @Requestbody CODE> ANNOTATION EN PLACE IT FAIT I> MAP dans la méthode de droite, mais il jette "org.springframework.web.httpmetiatiatiatypenotsupportedexception: Type de contenu" Application / X-www-Form-Urlencodé; Charset = UTF-8 'non pris en charge ".
De ma compréhension limitée, l'annotation @Requestbody code> implique que les données à traiter seront dans le corps de la demande. Cela informe le compilateur et i> la personne qui lit le code. Donc, laissant cela fait du code ambigu. C'est pourquoi je veux savoir pourquoi cela échoue.
comme le Documents de printemps de @Requestbody dit, le corps de la demande serait converti à votre objet par Il y a 4 par défaut HTTPMESSAGEconverters: P> Pour convertir le formulaire codé URL, qui est AJAX.Serialize () Créer, c'est le travail de httpmessageconverter code>.
formhttpmessagecverter code>. Depuis que vous avez une exception code> httpmediatypenotsupportedexception code>, je suppose que vous n'avez pas configuré formhttpmessageconverter code>. Vérifiez votre fichier de configuration de printemps, voici un exemple: P> < bean class ="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
< property name= "messageConverters" >
< list>
< ref bean= "mappingJacksonHttpMessageConverter" />
< ref bean= "stringHttpMessageConverter" />
<!-- Do you have this converter ? -->
< ref bean= "formHttpMessageConverter" />
</ list>
</ property>
</ bean>
Ce qui précède n'a pas fonctionné pour moi, même si j'ai ajouté tous les convertisseurs. J'ai dû utiliser le convertisseur personnalisé à Stackoverflow.com/a/31083802/471213 pour le faire fonctionner
@ USR-local-εψηελων est votre problème identique à cette question? Ma réponse est pour cette question et si le vôtre est différent, vous devriez peut-être poser une nouvelle question à expliquer plus de détails.
Pas le même problème exact: j'ai une erreur 406 lors de la soumission de la forme et du succès lors de la soumission de JSON. Cependant, avant de déboguer avec le code du printemps, je n'ai pas compris que l'entité de la demande DOOK B> Est-ce que vous devez mettre en évidence mulvenébémap code> afin de fonctionner avec formhttpmessagecverter code>. Donc, maintenant i> je commence à penser que l'OP est code> formdataOObject code> implémente cette interface ou autrement, j'ai le même problème que l'op mais l'ajout de ce convertisseur ne fonctionne pas. Et par la façon dont j'utilise le printemps 4.2
@ USR-local-εψηελων Je vous suggère de poser une nouvelle question à votre problème, dans ce commentaire, pas assez d'informations sont fournies.
Utilisation de formhttpmessagecverter code> signifie que je ne peux pas lier le formulaire à un objet personnalisé? Il sera toujours convertit à Multivantemap?
@Sidneydemoraes, il devrait s'agir de cette affaire. Mais vous pouvez convertir le multivaleumap en objet par vous-même.
Le problème est que lorsque nous utilisons Essayez ce qui suit: P> @RequestMapping(
value = "/baz",
method = RequestMethod.POST,
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
produces = MediatType.APPLICATION_JSON_VALUE
)
public @ResponseBody SearchResults[] jqueryPostHandler(
FormDataObject formData)
{
return this.searchService.find(formData);
}
Matthewsalvatore.blogspot.com.br/ 2013/08 / ...