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 等多种来源。选择合适的方法,不仅能让代码更加简洁,还能提高可维护性和可读性。在实际开发中,根据具体需求合理使用这些注解,将大大提高你的开发效率。

相关推荐
七星静香15 分钟前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员16 分钟前
java导出word文件(手绘)
java·开发语言·word
ZHOUPUYU16 分钟前
IntelliJ IDEA超详细下载安装教程(附安装包)
java·ide·intellij-idea
stewie620 分钟前
在IDEA中使用Git
java·git
Elaine20239135 分钟前
06 网络编程基础
java·网络
G丶AEOM36 分钟前
分布式——BASE理论
java·分布式·八股
落落鱼201337 分钟前
tp接口 入口文件 500 错误原因
java·开发语言
想要打 Acm 的小周同学呀38 分钟前
LRU缓存算法
java·算法·缓存
镰刀出海41 分钟前
Recyclerview缓存原理
java·开发语言·缓存·recyclerview·android面试
阿伟*rui3 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel