Maison  >  Article  >  Java  >  Java explique en détail comment Spring reçoit les paramètres de requête Web

Java explique en détail comment Spring reçoit les paramètres de requête Web

青灯夜游
青灯夜游avant
2018-10-25 16:39:042258parcourir

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 POST

Le code est le suivant :

La commande request curl est la suivante :
  @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 POST

Méthode 1 :
Définir la classe d'entité, analyser l'objet json dans la classe de force, besoin d'ajouter RequestBody annotation

Méthode 2 :
  // 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer