目录
隐藏
在 上一遍《Spring Boot 返回 JSON》 中我们学习了如何从 Spring Boot 返回 json 数据,这篇我们继续讨论,Spring Boot 如何获取 HTTP 传递的参数。
从 HTTP 协议中,我们可知,传递参数的方式有这么几种:
- 在 uri 中通过拼接查询字符串传递,这是我们常用的 HTTP GET 方式;
- 在 HTTP 中的 body 中传递,由于 body 中传递数据的大小不限,所以这种方式可以传递多种格式的数据,如:multipart/form-data、application/x-www-form-urlencode、application/json、application/xml、text/plain、text/html 等;这类方式为 HTTP POST 方式。
下面我们讨论几种常用的方式:
方式一:在 controller 类的 action 方法中,把所需要的参数作为 action 方法的参数(get/post)
@RequestMapping("/user/login")
public String login(String name, String pwd) {
String res = "you input: name:" + name + "; pwd:" + pwd;
return res;
}
这种方式同时支持这种方式同时支持 get
和 post
(仅支持 multipart/form-data、application/x-www-form-urlencode )
方式二:在 controller 类的 action 方法中, 通过 HttpServletRequest 作为 action 方法的参数(get/post)
@RequestMapping("/user/login2")
public String login2(HttpServletRequest request) {
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
return "you input: name:" + name + "; pwd:" + pwd;
}
这种方式同时支持这种方式同时支持 get
和 post
(仅支持 multipart/form-data、application/x-www-form-urlencode )
方式三:在 controller 类的 action 方法中, 通过 bean 作为 action 方法的参数(get/post)
@RequestMapping("/user/login3")
public String login3(User user) {
return user.toString();
}
User.java 内容:
package com.jdz.beans;
public class User {
private Integer uid;
private String name;
private String pwd;
@Override
public String toString() {
return String.format("uid: %d name: %s pwd:%s", this.uid, this.name, this.pwd);
}
}
这种方式同时支持这种方式同时支持 get
和 post
(仅支持 multipart/form-data、application/x-www-form-urlencode )
方式四:通过 @PathVariable 获取 uri 路径中的参数(get)
@RequestMapping(value = "/user/login4/{name}/{pwd}", method = RequestMethod.GET)
public String login4(@PathVariable String name, @PathVariable String pwd) {
return "you input: name:" + name + "; pwd:" + pwd;
}
请求方式:
http://localhost:8080/user/login4/name-lg4/pwd-lg4
这种方式只适合 get
方法
方式五:通过 @RequestParam 注解(get/post)
@RequestMapping("/user/login5")
public String login5(@RequestParam(value = "name", required = true) String name, @RequestParam("pwd") String pwd) {
return "you input: name:" + name + "; pwd:" + pwd;
}
这种方式同时支持这种方式同时支持 get
和 post
(仅支持 multipart/form-data、application/x-www-form-urlencode )
方式六:通过 @RequestParam 注解,并用 Map 来接收参数(get/post)
@RequestMapping("/user/login6")
public String login6(@RequestParam Map<String, Object> params) {
return "you input: name:" + params.get("name") + "; pwd:" + params.get("pwd");
}
这种方式同时支持这种方式同时支持 get
和 post
(仅支持 multipart/form-data、application/x-www-form-urlencode )
方式七:通过 @RequestBody 注解,并用 Map 来接收参数(json)
@RequestMapping("/user/login7")
public String login7(@RequestBody Map<String, Object> params) {
return "you input: name:" + params.get("name") + "; pwd:" + params.get("pwd");
}
这种方式适合 application/json ,用于获取 json 格式
其他
在此基础上还有其他的方式,上面主要列举了一些常用的用法,每种用法可以根据实际场景进行选择使用。