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

相关推荐
untE EADO4 分钟前
Tomcat的server.xml配置详解
xml·java·tomcat
ictI CABL13 分钟前
Tomcat 乱码问题彻底解决
java·tomcat
敖正炀15 分钟前
DelayQueue 详解
java
敖正炀41 分钟前
PriorityBlockingQueue 详解
java
shark22222221 小时前
Spring 的三种注入方式?
java·数据库·spring
陈煜的博客1 小时前
idea 项目只编译不打包,跳过测试,快速开发
java·ide·intellij-idea
hERS EOUS1 小时前
Spring Boot + Spring AI快速体验
人工智能·spring boot·spring
JAVA学习通1 小时前
LangChain4j 与 Spring AI 的技术选型深度对比:2026 年 Java AI 工程化实践指南
java·人工智能·spring
.柒宇.1 小时前
Java八股之反射
java·开发语言
敖正炀1 小时前
LinkedTransferQueue 详解
java