2012-10-12 4 views
5

signature du contrôleur (je l'ai essayé en requestbody ainsi):JSON poste au printemps contrôleur mvc

@RequestMapping(value = "/Lame", method = RequestMethod.POST) 
public 
@ResponseBody 
boolean getLame(@RequestParam String strToMatchA, @RequestParam String strToMatchB) {} 

Et ce que mon JSON:

{ 
"strToMatchA": "EN", 
"strToMatchB": "lon" 
} 

ne fonctionne pas, je reçois l'erreur:

org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'strToMatchA' is not present 

la suppression de ce premier paramètre de signature de la méthode permet alors travailler (la méthode est appelée à juste titre), que dois-je d oing?

Quand je change les paramètres de la méthode à annoter avec @RequestBody je reçois l'erreur suivante:

java.io.IOException: Stream closed 
+0

Avez-vous compilé avec le débogage activé? Sinon, vos noms de paramètres ne seront pas disponibles. –

+0

@DavidGrant RequestParam prendra le nom du paramètre défini dans la signature de la méthode. Mais j'ai essayé de spécifier manuellement le nom aussi – NimChimpsky

+1

Quelle bibliothèque utilisez-vous pour le mappage d'objet? Est-ce Jackson ou autre chose? Est-ce sur le classpath? De plus, la méthode de requête pour les contrôleurs RESTFul devrait être fondamentalement 'GET' au lieu de' POST'. – Lion

Répondre

3

Votre JSON est bien, mais pas la signature du contrôleur. Créer une classe avec des setters correspondant à json. Utilisez-le comme argument à la place de vos chaînes. Annotez-le avec le requestbody. Ça devrait marcher.

+2

est-il pas d'autre moyen? J'ai supposé le printemps couler plusieurs paramètres de requête? – NimChimpsky

+0

Il peut mais ce n'est pas un paramètre de requête ce que vous avez est le corps de la demande – eugen

+0

J'ai essayé avec les deux annoations. Aucun ne travaille. Comment puis-je le faire en utilisant deux paramètres de méthode ...? – NimChimpsky