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

相关推荐
白远山7 小时前
上海24小时自助健身房解决方案实战指南与经验分享
java·数据库·架构·需求分析
码兄科技7 小时前
24小时自助健身房系统软件开发实战指南:功能设计与部署方案
java·spring boot·uni-app
程序猿_极客7 小时前
【免费】分享一套优质的基于SpringBoot的扶贫助农管理系统(详解)
java·springboot·课程设计·计算机项目
2603_965148118 小时前
AI+API选品:下一代智能商务助手雏形已现
java·大数据·数据库·人工智能·数据挖掘
wuminyu8 小时前
HotSpot的轻量锁与膨胀后的ObjectMonitor状态重建原理
java·linux·c语言·jvm·c++
CoderYanger8 小时前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
北冥有鱼被烹8 小时前
perftest 之 ib_write_bw --use-null-mr 参数详解:用 NULL MR 做 RDMA 带宽测试
java
2601_963870218 小时前
基于SSM的特产代购系统
java·前端
paopaokaka_luck8 小时前
智慧社区综合服务小程序(人脸识别、AI问答、Echarts图形化分析)
前端·javascript·spring boot·spring·数据分析·echarts