本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net
在 Spring Boot 中处理 HTTP 请求

在 Web 开发中,处理 HTTP 请求和响应是构建任何应用程序的基础。Spring Boot 以其简化的配置和快速开发的能力,成为构建 RESTful Web 服务的首选框架之一。本文将围绕 Spring Boot 中的请求处理,从基础到进阶,详细介绍如何接收和处理不同类型的请求参数。
1. 使用 Postman 进行接口测试
在开发过程中,接口测试是必不可少的一环。Postman、Apipost 和 Apifox 等工具为我们提供了强大的接口测试能力,允许我们模拟各种 HTTP 请求,并验证服务端的响应。这些工具不仅支持 GET、POST 等基本请求类型,还支持 PUT、DELETE 等多种 HTTP 方法,是开发人员进行接口调试的得力助手。
2. 简单参数接收
原始方式获取请求参数
在 Spring Boot 中,我们可以通过在 Controller 方法的形参中声明HttpServletRequest对象来获取请求中的参数。这种方式虽然直接,但不够简洁,特别是在处理大量参数时。
@RestController
public class RequestController {
@RequestMapping("/simpleParam")
public String simpleParam(HttpServletRequest hsr) {
String name = hsr.getParameter("name");
String ageStr = hsr.getParameter("age");
int age = Integer.parseInt(ageStr); // 注意:这里应该处理NumberFormatException
System.out.println(name + ":" + age);
return "OK";
}
}
SpringBoot 中自动接收简单参数
Spring Boot 提供了更简洁的参数绑定方式。如果请求参数名与 Controller 方法形参变量名相同,Spring MVC 会自动将请求参数绑定到对应的方法形参上,并进行必要的类型转换。
@RequestParam 注解
当方法形参名称与请求参数名称不匹配时,可以使用@RequestParam注解来指定映射关系。此外,该注解的required属性默认是true,表示请求中必须包含该参数。
@RestController
public class RequestController {
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name = "name", required = false) String username, @RequestParam(name = "age") int age) {
System.out.println(username + ":" + age);
return "OK";
}
}
3. 实体参数
对于复杂的请求参数,我们可以创建一个 Java 对象作为实体参数。Spring MVC 会自动将请求中的参数绑定到这个对象的相应属性上。
public class User {
private String name;
private int age;
// 省略getter和setter方法
}
@RestController
public class RequestController {
@RequestMapping("/simplePOJO")
public String simplePOJO(User user) {
System.out.println(user);
return "OK";
}
}
请求示例(假设服务器运行在localhost:8080):
GET http://localhost:8080/simplePOJO?name=Tom&age=76
4. 数组参数
在 Spring MVC 中,处理数组参数非常直接。当你有一个请求包含多个同名参数时,Spring MVC 会自动将这些参数收集到一个数组中。这对于处理如多个 ID、多个标签等场景非常有用。
Controller 代码示例:
@RestController
public class ArrayParameterController {
@RequestMapping("/users")
public String receiveUserIds(@RequestParam("id") int[] ids) {
StringBuilder sb = new StringBuilder();
for (int id : ids) {
sb.append(id).append(", ");
}
if (sb.length() > 0) {
sb.setLength(sb.length() - 2); // 移除最后一个逗号和空格
}
return "Received IDs: " + sb.toString();
}
}
请求示例:
GET http://localhost:8080/users?id=1&id=2&id=3
5. 集合参数
与数组参数类似,Spring MVC 也支持将请求中的多个参数绑定到集合(如 List、Set)中。这在处理动态数量的参数时非常有用,尤其是当你不确定将有多少个参数被发送时。
Controller 代码示例:
@RestController
public class CollectionParameterController {
@RequestMapping("/items")
public String receiveItemNames(@RequestParam("name") List<String> names) {
return "Received Names: " + names;
}
}
请求示例:
GET http://localhost:8080/items?name=Apple&name=Banana&name=Cherry
6. 日期参数
对于日期类型的参数,Spring MVC 提供了@DateTimeFormat注解来指定日期的格式。这确保了无论客户端以什么格式发送日期字符串,Spring MVC 都能正确解析它。
Controller 代码示例:
@RestController
public class DateParameterController {
@RequestMapping("/appointment")
public String bookAppointment(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {
return "Appointment booked for: " + date.toString();
}
}
请求示例:
GET http://localhost:8080/appointment?date=2023-04-01
7. JSON 参数
当需要接收 JSON 格式的请求体时,通常会在 Controller 方法的形参中声明一个与 JSON 结构相对应的 Java 对象,并使用@RequestBody注解来标记这个参数。Spring MVC 会使用 HTTP 消息转换器(如 Jackson)自动将请求体中的 JSON 字符串转换为 Java 对象。
Controller 代码示例:
@RestController
public class JsonParameterController {
static class User {
private String name;
private int age;
// 省略getter和setter方法
}
@PostMapping("/user")
public String createUser(@RequestBody User user) {
return "User created: " + user.getName() + ", Age: " + user.getAge();
}
}
请求示例(使用 Postman 或 cURL):
POST http://localhost:8080/user
Content-Type: application/json
{
"name": "John Doe",
"age": 30
}
8. 路径参数
路径参数是 URL 路径中的一部分,用于表示资源的唯一标识符。在 Spring MVC 中,可以使用@PathVariable注解来捕获这些 URL 模板变量作为方法的参数。
Controller 代码示例(已在问题描述中给出):
@RestController
public class PathVariableController {
@RequestMapping("/user/{id}")
public String getUserById(@PathVariable("id") String id) {
// 处理逻辑
return "User ID: " + id;
}
}
请求示例:
GET http://localhost:8080/user/123