SpringBoot 接收参数的 19 种方式

开发 开源
本文将详细介绍 SpringBoot 接收参数的19种方式,涵盖了从简单到复杂的各种场景。

Spring Boot是一个基于Spring框架的开源应用开发框架,旨在简化Spring应用的搭建和开发过程,提高开发效率。在Spring Boot中,接收参数是开发过程中非常常见的需求。本文将详细介绍SpringBoot接收参数的19种方式,涵盖了从简单到复杂的各种场景。

1. 直接把请求参数写在方法形参中

这种方式适用于请求参数较少的情况。

@GetMapping("/user")
public String getUser(String name, String phone) {
    System.out.println("Name: " + name);
    System.out.println("Phone: " + phone);
    return "User Info";
}

2. 使用@RequestParam注解

当参数需要通过URL的查询字符串传递时,可以使用@RequestParam注解。

@GetMapping("/user")
public String getUser(@RequestParam String name, @RequestParam String phone) {
    // 实现逻辑
    return "User Info";
}

3. 通过实体类接收参数

当请求参数较多时,可以将它们封装到实体类中。

@PostMapping("/user")
public String createUser(User user) {
    // 使用user对象
    return "User Created";
}

4. 使用HttpServletRequest接收参数

通过Servlet API直接获取请求参数。

@GetMapping("/user")
public String getUser(HttpServletRequest request) {
    String name = request.getParameter("name");
    String phone = request.getParameter("phone");
    // 实现逻辑
    return "User Info";
}

5. 使用@PathVariable注解接收REST风格路径参数

用于处理URL路径中的变量。

@GetMapping("/user/{id}")
public String getUserById(@PathVariable String id) {
    // 实现逻辑
    return "User ID: " + id;
}

6. 使用@ModelAttribute注解接收表单数据

主要用于表单提交,将请求参数绑定到对象上。

@PostMapping("/user")
public String updateUser(@ModelAttribute User user) {
    // 使用user对象
    retu

7. 使用@RequestBody注解接收JSON请求体

适用于POST请求,请求体为JSON格式。

@PostMapping("/user")
public String createUser(@RequestBody User user) {
    // 使用user对象
    return "User Created";
}

8. 接收数组参数

@GetMapping("/users")
public String getUsers(@RequestParam String[] names) {
    // 处理names数组
    return "User Names";
}

9. 接收集合参数

使用@RequestParam注解绑定集合参数。

@GetMapping("/users")
public String getUsers(@RequestParam List<String> names) {
    // 处理names列表
    return "User Names";
}

10. 使用@RequestHeader注解获取HTTP请求头信息

@GetMapping("/user")
public String getUser(@RequestHeader("User-Agent") String userAgent) {
    return "User Agent: " + userAgent;
}

11. 使用@CookieValue注解获取Cookie值

@GetMapping("/user")
public String getUser(@CookieValue(value = "sessionID", defaultValue = "default") String sessionId) {
    return "Session ID: " + sessionId;
}

12. 使用@SessionAttribute注解获取会话属性

@GetMapping("/user")
public String getUser(@SessionAttribute("user") User user) {
    return "User Name: " + user.getName();
}

13. 使用@MatrixVariable注解获取路径中的矩阵变量

@GetMapping("/photos/{photoId}/comments/{commentId}")
public String getComment(@PathVariable String photoId, @PathVariable String commentId, @MatrixVariable(pathVar = "commentId") String tags) {
    // 处理tags
    return "Comment Info";
}

14. 使用MultiValueMap和Map处理表单提交的参数

@PostMapping("/users")
public String createUsers(@RequestParam MultiValueMap<String, String> params) {
    // 处理params
    return "Users Created";
}

@GetMapping("/users")
public String getUsers(@RequestParam Map<String, String> params) {
    // 处理params
    return "Users Info";
}

15. 使用@RequestPart处理multipart/form-data请求

@PostMapping("/upload")
public String uploadFile(@RequestPart("file") MultipartFile file) {
    // 处理文件上传
    return "File Uploaded";
}

16. 自定义参数解析器HandlerMethodArgumentResolver

通过实现HandlerMethodArgumentResolver接口来自定义参数解析逻辑。

17. 使用@RequestParam Map接收所有查询参数

@GetMapping("/user")
public String getUser(@RequestParam Map<String, String> allParams) {
    // 处理allParams
    return "All Params";
}

18. 使用@PathVariable Map接收所有路径变量

@GetMapping("/users/{ids}")
public String getUsers(@PathVariable Map<String, String> pathVars) {
    // 处理pathVars
    return "Path Variables";
}

19. 利用Spring Boot的自动配置和环境属性

Spring Boot提供了自动配置和环境属性功能,可以在application.properties或application.yml中配置默认参数,并在运行时通过@Value注解获取。

@Component
public class MyComponent {

    @Value("${my.custom.property}")
    private String customProperty;

    // 使用customProperty
}

以上就是在Spring Boot中接收参数的19种方式。每种方式都有其适用场景和注意事项,开发者应根据具体需求选择最合适的方法。掌握这些接收参数的方式,将大大提升Spring Boot应用的开发效率和灵活性。

责任编辑:赵宁宁 来源: 后端Q
相关推荐

2018-02-05 08:36:22

NetAppVeeam AWS存储

2018-04-28 15:51:33

Mybatis方式传递

2021-05-19 09:53:16

SpringbootMyBatisMySQL

2024-09-20 05:49:04

SpringBoot后端

2021-06-16 07:02:22

Python方式邮件

2024-02-26 13:47:00

C#Socket数据接收

2021-06-30 07:19:34

SpringBoot定时任务

2024-07-08 09:03:31

2024-05-30 08:51:28

Spring数据分布式

2020-05-07 15:15:11

COVID-19恶意软件网络攻击

2023-11-08 07:51:11

RabbitMQ接收消息

2024-10-25 16:07:39

Python函数

2019-11-21 11:10:21

云迁移云计算

2021-07-19 05:48:30

springboot 拦截器项目

2022-02-21 12:35:54

SpringBoot校验开发

2023-11-08 13:33:00

AOP技术信息

2023-11-08 08:47:34

Spring容器管理

2021-04-01 13:02:29

SpringBootJava代码

2024-06-19 19:17:04

2022-12-29 15:01:48

SpringBoot增量部署
点赞
收藏

51CTO技术栈公众号