Le contenu de cet article concerne la solution au problème selon lequel Spring MVC ne peut pas obtenir la valeur du paramètre normalement (avec le code). J'espère que cela sera utile. toi. .
J'ai récemment rencontré un problème très étrange lors du développement. Lors de l'utilisation du framework Spring MVC dans Tomcat8, les paramètres de méthode dans le contrôleur ne pouvaient pas obtenir normalement les valeurs correspondantes. Il a été résolu en changeant la version de Tomcat. 7.0.
Enregistrez le processus de solution suivant, première image :
Le projet adopte l'architecture ssm . La valeur du mot de passe du paramètre ne peut pas être obtenue ici. J'ai recherché des informations pertinentes sur Internet et trouvé les solutions suivantes, mais aucune d'entre elles n'a eu d'effet :
1. Utilisez l'annotation @RequestParam
<.> pour le paramètre password Après avoir ajouté l'annotation RequestParam, le débogage ne parvient toujours pas à obtenir la valeur du mot de passe. Je change la valeur de require en true et une erreur est signalée directement. L'erreur signifie que le paramètre password est manquant, mais le paramètre l'est. clairement passé. Pourquoi dit-on toujours que le paramètre est manquant, se pourrait-il que les paramètres que j'ai passés n'aient pas été reconnus ? À l’heure actuelle, on considère qu’il pourrait y avoir un problème avec la méthode de transmission des paramètres. Modification de la méthode de transmission des paramètres, en ajoutant la valeur du mot de passe à la fin de l'URL, en transmettant les paramètres comme une requête GET. Effectivement, pour cette raison, la valeur du paramètre peut être reçue. Cependant, en utilisant cette méthode de transmission de paramètres, la valeur du paramètre peut être reçue sans ajouter l'annotation RequestParam. Bien que cette méthode puisse recevoir la valeur du paramètre reçu, je ne supporte pas la méthode de passage de paramètres de POST, je cherche donc ensuite la méthode suivante 2. Utilisez @ Annotation RequestBody RequestBody signifie littéralement le corps de la demande, lorsque je fais la demande, je mets les paramètres dans le corps et je les transmets quand je vois cela. annotation, il semble que comme prévu, j'avais hâte de redémarrer Tomcat, puis je l'ai appelé avec Postman. Cette fois, le point d'arrêt n'a pas été saisi et une exception a été signalée directement : org.springframework. http.converter.HttpMessageNotReadableException : le corps de la requête requis est manquant : public boolean com.scdq.manager.controller.SystemController.login(java.lang.String)La signification générale de l'exception est que le corps de la requête nécessaire est manquant. En interrogeant les informations pertinentes, nous avons constaté que le RequestBody ne peut pas être comme ça. Pour l'utiliser, vous devez créer une classe, définir les paramètres pertinents dans la classe, puis utiliser cette classe comme type de paramètre de l'annotation RequestBody.
code modifié de cette manière, redémarrez Tomcat, utilisez Postman pour appeler, puis signalez à nouveau une exception : org.springframework.web.HttpMediaTypeNotSupportedException : type de contenu 'application/x-www-form-urlencoded' n'est pas pris en charge La signification générale de l'exception est que le type de contenu est application/x-www-form-urlencoded. Généralement, les données soumises via le formulaire sont par défaut. à ce type. Je suppose que cela peut être la raison de l'annotation RequestBody, donc je l'ai modifié. Méthode de transmission des paramètres : utilisez le format JSON pour transmettre les données<.>
En utilisant cette méthode de passage de paramètres, la valeur du paramètre peut effectivement être reçue, mais la méthode de réception des paramètres et la méthode de passage des paramètres sont devenues compliquées. J'ai copié ce projet chez moi et j'ai continué à l'écrire. Quand j'étais dans l'entreprise, tout se déboguait bien, mais quand je suis rentré chez moi, cela n'a pas fonctionné, je ne comprenais pas pourquoi le même code n'avait pas été trouvé. modifié. Pourquoi quelque chose s'est-il mal passé lorsque je suis rentré chez moi ? Étant donné que les codes sont les mêmes mais que les résultats d'exécution sont différents, cela signifie simplement que l'environnement d'exécution a changé. Alors, en quoi exactement l’environnement est-il différent ? Lorsque ce type de problème se produit, considérez d'abord la structure de la base de données. Cependant, la version de la base de données de l'ordinateur personnel est la même que celle de l'ordinateur de l'entreprise et les données sont copiées directement à partir de l'entreprise, la base de données est donc directement exclue. sans compter qu'il est reçu dans le Contrôleur Sans les paramètres et l'étape d'accès à la base de données, il est encore moins susceptible d'être lié à la base de données, donc la base de données est directement exclue. Étant donné que le projet est construit par Maven, les packages jar pertinents sont automatiquement téléchargés par Maven, je me demande donc s'il y a un problème avec les packages jar que Maven télécharge automatiquement. Supprimez ensuite tous les packages jar de l'entrepôt local et laissez Maven redémarrer. Je l'ai téléchargé et répété plusieurs fois, mais le problème persistait. Je n'avais d'autre choix que d'exclure temporairement la cause de Maven. En fin de compte, je ne pouvais penser à aucune autre raison, alors j'ai commencé à douter de la cause de Tomcat. Le Tomcat de l'entreprise est la version 7.0 et le Tomcat à la maison est la version 8.0. Bien que les deux versions de Tomcat soient incohérentes, je l'ai fait. Je ne pense pas inconsciemment qu'il doit s'agir de la version Tomcat. Après tout, je pense inconsciemment que la version 8.0 doit être une mise à niveau des fonctions après la version 7.0. Même si je pensais de cette façon, je suis quand même allé au test avec la mentalité d'être un cheval mort et un médecin vivant. J'ai téléchargé la version 7.0 du package compressé sur le site officiel de Tomcat, puis j'ai configuré l'environnement correspondant et je l'ai appelé avec postman. . Le résultat était tellement inattendu. Avez-vous obtenu la valeur du paramètre ? ! ! ! Est-ce vraiment à cause de la version Tomcat ? Cela semble trop ennuyeux. . . . Il semble que rechercher aveuglément des versions supérieures ne soit pas une bonne chose [Recommandations associées : Tutoriel Java]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!