Spring MVC接收参数方式

1. 使用 @RequestParam

@RequestParam 注解用于将请求中的参数绑定到控制器方法的参数上。

基本用法
java 复制代码
@GetMapping("/example")
public String example(@RequestParam("paramName") String param) {
    // 处理 param
    return "result";
}
可选参数

可以设置 required 属性为 false,并提供一个 defaultValue

java 复制代码
@GetMapping("/example")
public String example(@RequestParam(value = "paramName", required = false, defaultValue = "default") String param) {
    // 处理 param
    return "result";
}

2. 接收多个请求参数

可以使用 Map<String, String> 来接收所有请求参数。

java 复制代码
@GetMapping("/example")
public String example(@RequestParam Map<String, String> params) {
    // 处理所有请求参数
    for (String key : params.keySet()) {
        System.out.println(key + ": " + params.get(key));
    }
    return "result";
}

3. 使用 @PathVariable

当 URL 包含动态部分(路径参数)时,可以使用 @PathVariable 注解来捕获这些变量。

java 复制代码
@GetMapping("/example/{id}")
public String example(@PathVariable("id") Long id) {
    // 处理 id
    return "result";
}

4. 使用 @RequestBody

@RequestBody 注解用于接收 JSON 或 XML 格式的请求体,并将其转换为 Java 对象。

java 复制代码
@PostMapping("/example")
public String example(@RequestBody MyObject myObject) {
    // 处理 myObject
    return "result";
}
自定义对象的示例
java 复制代码
public class MyObject {
    private String name;
    private int age;

    // Getters and Setters
}

// 控制器
@PostMapping("/example")
public String example(@RequestBody MyObject myObject) {
    System.out.println(myObject.getName());
    return "result";
}

5. 使用 @ModelAttribute

@ModelAttribute 用于将请求参数自动封装到 Java 对象中,通常用于表单提交。

java 复制代码
public class MyForm {
    private String username;
    private String password;

    // Getters and Setters
}

@PostMapping("/submit")
public String submit(@ModelAttribute MyForm myForm) {
    // 处理 myForm
    return "result";
}

6. 接收文件上传

对于文件上传,可以使用 @RequestParam 并指定类型为 MultipartFile

java 复制代码
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
    if (!file.isEmpty()) {
        // 处理文件
        String filename = file.getOriginalFilename();
        System.out.println("Uploaded file: " + filename);
    }
    return "result";
}

7. 使用 @RequestHeader

可以使用 @RequestHeader 来获取 HTTP 请求头信息。

java 复制代码
@GetMapping("/example")
public String example(@RequestHeader("User-Agent") String userAgent) {
    // 处理 User-Agent
    return "result";
}

8. 使用 @CookieValue

可以通过 @CookieValue 来获取 cookie 值。

java 复制代码
@GetMapping("/example")
public String example(@CookieValue("sessionId") String sessionId) {
    // 处理 sessionId
    return "result";
}

9. 处理复杂对象

你可以结合 @ModelAttribute 和嵌套对象来处理更复杂的表单。

java 复制代码
public class Address {
    private String street;
    private String city;

    // Getters and Setters
}

public class User {
    private String name;
    private Address address;

    // Getters and Setters
}

@PostMapping("/user")
public String createUser(@ModelAttribute User user) {
    // 处理用户信息
    return "result";
}

10. 接收多个 Query 参数

java 复制代码
@GetMapping("/example")
public String example(@RequestParam("param1") String param1, @RequestParam("param2") String param2) {
    // 处理 param1 和 param2
    return "Result: " + param1 + ", " + param2;
}

11. 创建一个 POJO 类来封装多个 Query 参数

java 复制代码
public class QueryParams {
    private String param1;
    private String param2;

    // Getters and Setters
}

@GetMapping("/example")
public String example(QueryParams queryParams) {
    // 处理 queryParams
    return "Result: " + queryParams.getParam1() + ", " + queryParams.getParam2();
}

总结

Spring MVC 提供了灵活多样的方法来接收请求参数,包括从 URL、请求体、请求头、cookie 等多种来源。选择合适的方法,不仅能让代码更加简洁,还能提高可维护性和可读性。在实际开发中,根据具体需求合理使用这些注解,将大大提高你的开发效率。

相关推荐
魔镜魔镜_谁是世界上最漂亮的小仙女1 分钟前
java-集合
java·后端·程序员
磊叔的技术博客2 分钟前
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
spring·llm·openai
真实的菜3 分钟前
消息队列高级特性与原理:解锁分布式系统的底层逻辑
java
若水不如远方4 分钟前
java范型
java
凌辰揽月7 分钟前
Web后端基础(基础知识)
java·开发语言·前端·数据库·学习·算法
lifallen12 分钟前
深入浅出 Arrays.sort(DualPivotQuicksort):如何结合快排、归并、堆排序和插入排序
java·开发语言·数据结构·算法·排序算法
长安不见14 分钟前
背景知识: 理解LimitLatch背后的AQS
java
小吕学编程17 分钟前
策略模式实战:Spring中动态选择商品处理策略的实现
java·开发语言·设计模式
weixin_4383354023 分钟前
Spring Boot实现接口时间戳鉴权
java·spring boot·后端
pan_junbiao1 小时前
Spring框架的设计模式
java·spring·设计模式