目录
请求响应
请求
Postman 工具
Postman 是一款功能强大的网页调试与发送网页 HTTP 请求的 Chrome 插件
作用:常用于进行接口测试
简单参数请求
-
原始方式
在原始的 Web 程序中,获取请求参数,需要通过 HttpServletRequest 对象手动获取(繁琐,手动类型转换)
javaimport jakarta.servlet.http.HttpServletRequest; import org.springframework.boot.autoconfigure.graphql.GraphQlProperties; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class RequestController { @RequestMapping("/simpleParam") public String simpleParam(HttpServletRequest request){ // 获取请求参数 String name = request.getParameter("name"); String ageStr = request.getParameter("age"); int age = Integer.parseInt(ageStr); System.out.println("name:"+name+" age:"+age); return "success"; } }
用 GET 请求在 Postman 中输入对应的 API 并设置参数,点击发送

后端服务器接收数据成功显示"success"。
-
Spring Boot 方式
简单参数:参数名与形参变量名相同,定义形参即可接收参数
javaimport org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class RequestController { @RequestMapping("/simpleParam") public String simpleParam(String name, Integer age){ // 获取请求参数 System.out.println("name:"+name+" age:"+age); return "success"; } }
用 POST 请求则是在 Postman 中输入对应的 API,在响应体中设置参数,点击发送
后端服务器接收数据成功显示"success"。
-
如果方法形参名称与请求参数名称不匹配,可以使用 @RequestParam 完成映射
javaimport org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class RequestController { @RequestMapping("/simpleParam") public String simpleParam(@RequestParam(name="name")String username, Integer age){ // 获取请求参数 System.out.println("name:"+username+" age:"+age); return "success"; } }
注意:用 @RequestParam 映射的参数必须传递,不传递则会报错,因为参数的 required 属性默认是 true
javapublic String simpleParam(@RequestParam(name="name", required=true)String username, Integer age)
如果将 true 改为 false,不传递也不会报错
实体参数请求
-
简单实体对象:请求参数名与形参对象属性名相同,定义 POJO 接收即可
假设前端传递 name 和 age 两个参数,则实体类可以定义为:
javapublic class User { private String name; private Integer age; public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
请求参数的方法为:
java@RequestMapping("/simplePojo") public String simplePojo(User user){ // 获取请求参数 System.out.println(user); return "success"; }
-
复杂实体对象:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套 POJO 属性参数
有个实体类 User 定义如下
javapublic class User { private String name; private Integer age; private Address address; }
其中嵌套着另一个实体类 Address,定义如下:
javapublic class Address { private String province; private String city; }
如果说要传递值,则为
address.province=guangdong
和address.city=guangzhou
数组集合参数
-
数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
请求数组参数方法为:
java@RequestMapping("/arrayParam") public String arrayParam(String[] names){ // 获取请求参数 System.out.println(Arrays.toString(names)); return "success"; }
传递参数时只需要一个一个传就可以了
控制台获取到数组参数
-
集合参数:请求参数名与形参集合名称相同且请求参数为多个,用 @RequestParam 绑定参数关系
请求集合参数的方法为
java@RequestMapping("/listParam") public String listParam(@RequestParam List<String> names){ // 获取请求参数 System.out.println(names); return "success"; }
传递参数与数组参数一样
日期参数
-
日期参数:使用 @DateTimeFormat 注解完成日期参数格式转换
请求参数的方法为:
java@RequestMapping("/dateParam") public String dateParam(@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){ // 获取请求参数 System.out.println(updateTime); return "success"; }
注意:如果月份是个位数,要在前面加 0 才能成功传递参数
JSON 参数
JSON 参数:JSON 数据键名与形参对象属性名相同,定义 POJO 类型形参即可接收参数,需要使用 @RequestBody 标识
请求参数的方法为:
java
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
// 获取请求参数
System.out.println(user);
return "success";
}
传递参数给后端要按照 JSON 格式,并且实体类中的变量名要与请求参数 JSON 中的一致

路径参数
路径参数:通过请求 URL 直接传递参数,使用 {...} 来标识该路径参数,需要使用 @PathVariable 获取路径参数
java
@RequestMapping("/path/{id}") // path后面的id不能写死,应该动态的获取
public String pathParam(@PathVariable Integer id){
// 获取请求参数
System.out.println(id);
return "success";
}
传递参数的时候就不用设置参数值了,直接填写 URL 即可

如果要用多个路径参数,只需在前一个后面加上"/参数名"即可
java
@RequestMapping("/path/{id}/{name}")
public String pathParam(@PathVariable Integer id, @PathVariable String name){
// 获取请求参数
System.out.println(id + " " + name);
return "success";
}
响应
服务端在方法或者类上添加 @ResponseBody 来以 JSON 格式响应返回结果
关于服务端的响应部分其实在请求部分就有涉及,每当请求发送成功后,服务端都会返回一个"success",但是在之前的代码中并没有 @ResponseBody 注解,这是因为 @RestController = @Controller + @ResponseBody,也就是说用只需添加 @RestController 即可。
由于返回的数据类型不同,响应格式也有差异
java
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello World~";
}
@RequestMapping("/getAddress")
public Address getAddress() {
Address ad = new Address();
ad.setProvince("广东");
ad.setCity("深圳");
return ad;
}
@RequestMapping("/getAddresses")
public List<Address> getAddresses() {
List<Address> list = new ArrayList<>();
Address ad = new Address();
ad.setProvince("广东");
ad.setCity("深圳");
Address ad2 = new Address();
ad2.setProvince("广西");
ad2.setCity("桂林");
list.add(ad);
list.add(ad2);
return list;
}
}
响应的格式有字符串、JSON 格式、JSON格式的数组

这样响应的格式不规范,不便管理和维护,所以要创建一个响应结果封装类来统一响应结果
java
/*
* 统一响应结果封装类
*/
public class Result {
private Integer code; // 状态码,200为成功,500为失败
private String message; // 返回消息
private Object data; // 返回数据
public Result(Integer code, String message, Object data) {
this.code = code;
this.message = message;
this.data = data;
}
public Integer getCode() {return code;}
public void setCode(Integer code) {this.code = code;}
public String getMessage() {return message;}
public void setMessage(String message) {this.message = message;}
public Object getData() {return data;}
public void setData(Object data) {this.data = data;}
public static Result success(Object data) {
return new Result(200, "success", data);
}
public static Result success() {
return new Result(200, "success", null);
}
public static Result error(String message) {
return new Result(500, message, null);
}
@Override
public String toString() {
return "Result{" +
"code=" + code +
", message='" + message + '\'' +
", data=" + data +
'}';
}
}
将原来的方法改为:
java
@RestController
public class HelloController {
@RequestMapping("/hello")
public Result hello() {
return Result.success("hello world");
}
@RequestMapping("/getAddress")
public Result getAddress() {
Address ad = new Address();
ad.setProvince("广东");
ad.setCity("深圳");
return Result.success(ad);
}
@RequestMapping("/getAddresses")
public Result getAddresses() {
List<Address> list = new ArrayList<>();
Address ad = new Address();
ad.setProvince("广东");
ad.setCity("深圳");
Address ad2 = new Address();
ad2.setProvince("广西");
ad2.setCity("桂林");
list.add(ad);
list.add(ad2);
return Result.success(list);
}
}
如此一来,响应格式就全部统一了