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 小时前
基于SpringBoot的野生动物公益保护平台设计与实现-附源码
java·spring boot·后端
SL_staff2 小时前
离散制造排程破局:JVS-APS 四步闭环落地实践(开发者视角)
java·产品·全栈
这个昵称不容易2 小时前
SpringBoot 美容院管理系统:232个Java文件315个接口,5套角色从预约到发货一整条链路
java·springboot·毕设
装不满的克莱因瓶3 小时前
【SpringAI Alibaba】ReactAgent记忆管理MessageTrimmingHook与MessageDeletionHook
java·人工智能·ai·ai编程·springai·springaialibaba
文丑颜不良啊3 小时前
LeetCode2241~2260题目解析
java·leetcode
文丑颜不良啊3 小时前
LeetCode2321~2340题目解析
java·leetcode
驭渊的小故事3 小时前
Spring AOP 核心概念与通知类型详解
java·后端·spring
vipxieliang3 小时前
ValidX vs 手写验证代码:开发效率对比实测
java·spring boot·后端
vipxieliang4 小时前
虚拟线程与 GraalVM:Spring Boot 3.x 云原生性能跃迁
java·spring boot·后端
Rain的Java大神之路4 小时前
面试官最烦的答案:“我用 Redis + Token”!接口幂等 8 种方案 + 四层防御,把重复扣款工单干到 0
java·后端·面试