Cet article vous apporte une explication détaillée de la façon dont Spring reçoit les paramètres de requête Web en Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
1 Paramètre de requête
Format de la requête : url?Paramètre 1=valeur 1&Paramètre 2=valeur 2...
Applicable aux deux Pour les méthodes GET et POST
il existe plusieurs façons d'écrire des paramètres de requête au printemps :
Méthode 1 :
Le nom du paramètre de méthode est le nom du paramètre de requête
// 查询参数1 @RequestMapping(value = "/test/query1", method = RequestMethod.GET) public String testQuery1(String username, String password) { System.out.println("username=" + username + ", password=" + password); return "username=" + username + ", password=" + password; }
méthode Deux :
Extraire les paramètres de HttpServletRequest
// 查询参数2 @RequestMapping(value = "/test/query2", method = RequestMethod.GET) public String testQuery2(HttpServletRequest request) { String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println("username=" + username + ", password=" + password); return "username=" + username + ", password=" + password; }
Troisième méthode :
Le nom du paramètre de méthode et le nom du paramètre de requête peuvent être différents, et les paramètres sont liés via l'annotation @RequestParam
// 查询参数3 @RequestMapping(value = "/test/query3", method = RequestMethod.GET) public String testQuery3(@RequestParam("username") String un, @RequestParam("password") String pw) { System.out.println("username=" + un + ", password=" + pw); return "username=" + un + ", password=" + pw; }
Méthode 4 :
Créez un objet de classe d'entité comme support de paramètre. Spring liera automatiquement les paramètres aux propriétés de l'objet de classe d'entité en fonction du nom du paramètre
// 查询参数4 @RequestMapping(value = "/test/query4", method = RequestMethod.GET) public String testQuery4(User user) { String username = user.getUsername(); String password = user.getPassword(); System.out.println("username=" + username + ", password=" + password); return "username=" + username + ", password=" + password; }La classe d'entité est définie comme suit :
@Data @NoArgsConstructor @AllArgsConstructor @Builderpublic class User { private String username; private String password; }La bibliothèque tierce lombok est utilisée ici, il n'est donc pas nécessaire d'ajouter manuellement get, set et d'autres méthodes dans le code, lombok sera ajouté automatiquement. La commande curl pour envoyer la requête est la suivante :
curl -i 'http://192.168.1.14:8080/test/query1?username=aaa&password=bbb'Le message d'interaction est le suivant :
GET /test/query1?username=aaa&password=bbb HTTP/1.1 Host: 192.168.1.14:8080 User-Agent: curl/7.58.0 Accept: */*HTTP/1.1 200 Content-Type: text/plain;charset=UTF-8 Content-Length: 26 Date: Thu, 25 Oct 2018 07:01:30 GMT username=aaa, password=bbb
2 formulaire paramètres
Les paramètres de la requête ne sont pas dans l'url, mais dans le corps. Le format est : url ? Paramètre 1=valeur 1¶mètre 2=valeur 2...Applicable à la méthode POST
La méthode de traitement des paramètres de formulaire est presque exactement la même que la méthode de traitement des paramètres de requête précédente, sauf que la méthode de méthode est définie sur la méthode POST dans l'annotation RequestMethod
Première méthode :
Méthode deux :// 表单参数1 @RequestMapping(value = "/test/form1", method = RequestMethod.POST) public String testForm1(String username, String password) { System.out.println("username=" + username + ", password=" + password); return "username=" + username + ", password=" + password; }Méthode trois :
// 表单参数2 @RequestMapping(value = "/test/form2", method = RequestMethod.POST) public String testForm2(HttpServletRequest request) { String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println("username=" + username + ", password=" + password); return "username=" + username + ", password=" + password; }Méthode quatre :
// 表单参数3 @RequestMapping(value = "/test/form3", method = RequestMethod.POST) public String testForm3(@RequestParam("username") String un, @RequestParam("password") String pw) { System.out.println("username=" + un + ", password=" + pw); return "username=" + un + ", password=" + pw; }La boucle La commande request est la suivante :
// 表单参数4 @RequestMapping(value = "/test/form4", method = RequestMethod.POST) public String testForm4(User user) { String username = user.getUsername(); String password = user.getPassword(); System.out.println("username=" + username + ", password=" + password); return "username=" + username + ", password=" + password; }Demande et Le message de réponse est le suivant :
curl -X POST -i -d "username=aaa&password=bbb" http://192.168.1.14:8080/test/form1
POST /test/form1 HTTP/1.1 Host: 192.168.1.14:8080 User-Agent: curl/7.58.0 Accept: */* Content-Length: 25 Content-Type: application/x-www-form-urlencoded username=aaa&password=bbbHTTP/1.1 200 Content-Type: text/plain;charset=UTF-8 Content-Length: 26 Date: Thu, 25 Oct 2018 07:05:35 GMT username=aaa, password=bbb
3 Paramètre de chemin Le paramètre de requête fait partie de l'url, le format est : url/paramètre 1 /Paramètre 2...
Applicable aux méthodes GET et POSTLe code est le suivant :
@RequestMapping(value = "/test/url/{username}/{password}", method = RequestMethod.GET) public String testUrl(@PathVariable String username, @PathVariable String password) { System.out.println("username=" + username + ", password=" + password); return "username=" + username + ", password=" + password; }Messages de requête et de réponse Comme suit :
curl -i http://192.168.1.14:8080/test/url/aaa/bbb
GET /test/url/aaa/bbb HTTP/1.1 Host: 192.168.1.14:8080 User-Agent: curl/7.58.0 Accept: */*HTTP/1.1 200 Content-Type: text/plain;charset=UTF-8 Content-Length: 26 Date: Thu, 25 Oct 2018 07:07:44 GMT username=aaa, password=bbb
4 paramètres de format json Les paramètres de la requête sont dans le Body et sont au format json. Besoin d'ajouter un en-tête de requête : Content-Type : application/json;charset=UTF-8
Applicable à la méthode POSTMéthode 1 :
Définir la classe d'entité, analyser l'objet json dans la classe de force, besoin d'ajouter RequestBody annotation
// json参数1 @RequestMapping(value = "/test/json1", method = RequestMethod.POST) public String testJson1(@RequestBody User user) { String username = user.getUsername(); String password = user.getPassword(); System.out.println("username=" + username + ", password=" + password); return "username=" + username + ", password=" + password; }
Si vous ne souhaitez pas définir de classe d'entité, vous pouvez également analyser la requête json directement dans la classe JSONObject
Méthode 3 :// json参数2 @RequestMapping(value = "/test/json2", method = RequestMethod.POST) public String testJson2(@RequestBody JSONObject json) { String username = json.getString("username"); String password = json.getString("password"); System.out.println("username=" + username + ", password=" + password); return "username=" + username + ", password=" + password; }
Vous pouvez également analyser directement l'objet json en un objet Map
La commande request curl est la suivante :// json参数3 @RequestMapping(value = "/test/json3", method = RequestMethod.POST) public String testJson3(@RequestBody Map<String, String> userMap) { String username = userMap.get("username"); String password = userMap.get("password"); System.out.println("username=" + username + ", password=" + password); return "username=" + username + ", password=" + password; }La requête et le message de réponse est le suivant :
curl -X POST -i -H 'Content-Type: application/json;charset=UTF-8' -d '{ "username" : "aaa", "password" : "bbb" } 'http://192.168.1.14:8080/test/json1
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!