Cet article étudie principalement le contenu pertinent sur l'utilisation correcte de @Requestbody, comme suit.
Récemment, je prenais le contrôle d'un emploi avec un collègue qui était sur le point de partir. Le projet que j'ai repris a été construit avec Springboot. J'ai vu cette méthode d'écriture:
@Requestmapping ("dothis") public String dothis (httpServLetRequest request, @RequestParam ("id") long id, // user id @requestParam ("back_url") string back_url, // adresse de rappel @requestbody testentity json_data // json data, for java entity grasy) {// ...Ceci est une méthode de mappage de demande, puis entrez URL avec le navigateur: http://127.0.0.1:8080/test/dothis?id=1&back_url=url&json_data={"code":2 ,"message":"test "}}
Dans cette méthode, utilisez @RequestParam pour obtenir les paramètres, puis utilisez @Requestbody pour convertir les paramètres au format JSON en type Java
Lors de l'exécution, l'erreur a été trouvée: le corps de demande requis est manquant
@Requestbody nécessite l'utilisation de mappingjackson2httpMessageConverter pour charger, mais la documentation officielle de Springboot mentionne que cela est déjà chargé par défaut, et il n'y a pas d'erreurs dans la rédaction de chaînes JSON et de javabeans.
Par conséquent, étant donné que cela devrait être un problème de demande de type de contenu, car il n'y a aucun moyen de définir le type de contenu en utilisant le navigateur pour entrer l'URL, le ressort ne peut pas trouver le corps de la demande
Pour confirmer cette idée, écrivez vous-même une classe de demande:
String add_url = "http://127.0.0.1:8080/test/dothis"; Url url = new URL (add_url); HttpurlConnection Connection = (httpurlConnection) url.openconnection (); connection.setDoInput (true); connection.setDoOutput (true); connection.setRequestMethod ("post"); connection.setUseCaches (false); connection.setInstanceFollowRedirects (true); connection.setRequestProperty ("Content-Type", "Application / JSON"); connection.connect (); DataOutputStream out = new DataOutputStream (connection.getOutputStream ()); JsonObject obj = new JSONObject (); obj.put ("code", -1002); obj.put ("message", "msg"); out.writeBytes (obj.toString ()); out.flush (); out.close ();La demande a toujours échoué. Après le débogage, j'ai constaté que toutes les annotations @RequestParam doivent être supprimées pour réussir.
Résumer
1. @Requestbody doit analyser tous les paramètres de demande en tant que JSON. Par conséquent, la valeur clé = ne peut pas être incluse dans l'URL de demande. Tous les paramètres de demande sont un JSON
2. Lors de la saisie directement de l'URL via le navigateur, @Requestbody ne peut pas obtenir l'objet JSON. Vous devez utiliser la programmation Java ou la demande de méthode basée sur AJAX et définir le type de contenu sur Application / JSON
Ce qui précède consiste à interpréter l'utilisation correcte de @Requestbody, et j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!