微信登录

控制器 - 请求参数处理 - 接收请求参数

Java - Web - Spring 《控制器 - 请求参数处理 - 接收请求参数》

在 Java Web 开发中,Spring 框架是一个非常流行的选择。当我们构建 Web 应用时,经常需要从客户端接收请求参数,Spring 提供了多种方式来处理这些请求参数。本文将详细介绍 Spring 中控制器接收请求参数的各种方法,并给出相应的演示代码。

1. 基本请求参数的接收

1.1 使用 @RequestParam 注解

@RequestParam 注解用于从请求的查询字符串或表单数据中获取参数。

示例代码

  1. import org.springframework.stereotype.Controller;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RequestParam;
  4. import org.springframework.web.bind.annotation.ResponseBody;
  5. @Controller
  6. public class BasicParamController {
  7. @RequestMapping("/basicParam")
  8. @ResponseBody
  9. public String handleBasicParam(@RequestParam("name") String name, @RequestParam("age") int age) {
  10. return "Name: " + name + ", Age: " + age;
  11. }
  12. }

解释

  • @RequestParam("name") 表示从请求中获取名为 name 的参数,并将其赋值给方法参数 name
  • @RequestParam("age") 同理,获取名为 age 的参数并赋值给 age

1.2 @RequestParam 的可选属性

属性名 描述
value 指定请求参数的名称,与 name 作用相同。
name 指定请求参数的名称。
required 表示该参数是否必需,默认为 true
defaultValue 当请求中没有该参数时,使用的默认值。

示例代码

  1. import org.springframework.stereotype.Controller;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RequestParam;
  4. import org.springframework.web.bind.annotation.ResponseBody;
  5. @Controller
  6. public class OptionalParamController {
  7. @RequestMapping("/optionalParam")
  8. @ResponseBody
  9. public String handleOptionalParam(@RequestParam(name = "name", required = false, defaultValue = "Guest") String name) {
  10. return "Hello, " + name;
  11. }
  12. }

2. 接收实体对象参数

2.1 表单数据绑定到实体对象

当请求参数与实体类的属性名相同时,Spring 可以自动将请求参数绑定到实体对象上。

示例代码

  1. import org.springframework.stereotype.Controller;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.ResponseBody;
  4. class User {
  5. private String name;
  6. private int age;
  7. // Getters and Setters
  8. public String getName() {
  9. return name;
  10. }
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14. public int getAge() {
  15. return age;
  16. }
  17. public void setAge(int age) {
  18. this.age = age;
  19. }
  20. }
  21. @Controller
  22. public class EntityParamController {
  23. @RequestMapping("/entityParam")
  24. @ResponseBody
  25. public String handleEntityParam(User user) {
  26. return "Name: " + user.getName() + ", Age: " + user.getAge();
  27. }
  28. }

解释

  • 客户端发送的请求参数 nameage 会自动绑定到 User 对象的对应属性上。

3. 接收路径变量参数

3.1 使用 @PathVariable 注解

@PathVariable 注解用于从请求的 URL 路径中获取变量。

示例代码

  1. import org.springframework.stereotype.Controller;
  2. import org.springframework.web.bind.annotation.PathVariable;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.ResponseBody;
  5. @Controller
  6. public class PathVariableController {
  7. @RequestMapping("/user/{id}")
  8. @ResponseBody
  9. public String handlePathVariable(@PathVariable("id") int userId) {
  10. return "User ID: " + userId;
  11. }
  12. }

解释

  • {id} 表示路径变量,@PathVariable("id") 用于获取该变量的值并赋值给 userId

4. 接收 JSON 数据

4.1 使用 @RequestBody 注解

当客户端发送 JSON 数据时,我们可以使用 @RequestBody 注解将 JSON 数据转换为 Java 对象。

示例代码

  1. import org.springframework.http.MediaType;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestBody;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RequestMethod;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. @Controller
  8. public class JsonParamController {
  9. @RequestMapping(value = "/jsonParam", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
  10. @ResponseBody
  11. public String handleJsonParam(@RequestBody User user) {
  12. return "Name: " + user.getName() + ", Age: " + user.getAge();
  13. }
  14. }

解释

  • @RequestBody 注解将请求体中的 JSON 数据转换为 User 对象。
  • consumes = MediaType.APPLICATION_JSON_VALUE 表示该请求只接受 JSON 格式的数据。

总结

Spring 提供了多种方式来接收请求参数,每种方式都有其适用场景:
| 接收方式 | 注解 | 适用场景 |
| —— | —— | —— |
| 基本请求参数 | @RequestParam | 从查询字符串或表单数据中获取单个参数。 |
| 实体对象参数 | 无(自动绑定) | 当请求参数与实体类属性名相同时,自动绑定到实体对象。 |
| 路径变量参数 | @PathVariable | 从请求的 URL 路径中获取变量。 |
| JSON 数据 | @RequestBody | 接收客户端发送的 JSON 数据并转换为 Java 对象。 |

通过合理使用这些方法,我们可以方便地处理各种类型的请求参数,构建出功能强大的 Web 应用。