一个例子讲清SpringBoot接收前端参数各种情况


在平时项目开发中,接收前端不同形式的参数是基本操作。 下面梳理出Spring Boot 接收前端不同形式参数的各种情况。

1. 项目准备

首先,确保你已经创建了一个 Spring Boot 项目,并且在 pom.xml 中添加了必要的依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2. 定义学生实体类

创建一个 Student 类,用于封装学生的相关信息:


public class Student {
    private Long id;
    private String name;
    private int age;
    private String major;

    // 无参构造函数
    public Student() {}

    // 有参构造函数
    public Student(Long id, String name, int age, String major) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.major = major;
    }

    // Getter 和 Setter 方法
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", major='" + major + '\'' +
                '}';
    }
}

3. 创建控制器类

创建一个 StudentController 类,用于处理各种接收学生信息的请求:


import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/students")
public class StudentController {

    // 1. 路径参数
    @GetMapping("/{id}")
    public String getStudentById(@PathVariable("id") Long id) {
        return "获取到 ID 为 " + id + " 的学生信息";
    }

    // 2. 请求参数
    @GetMapping("/search")
    public String searchStudents(@RequestParam("name") String name, @RequestParam("age") int age) {
        return "搜索姓名为 " + name + ",年龄为 " + age + " 的学生";
    }

    // 3. 请求体参数 - 接收单个学生对象
    @PostMapping("/add")
    public String addStudent(@RequestBody Student student) {
        return "添加学生:" + student.toString();
    }

    // 4. 请求体参数 - 接收学生对象数组
    @PostMapping("/addAll")
    public String addAllStudents(@RequestBody List<Student> students) {
        StringBuilder result = new StringBuilder("添加以下学生:\n");
        for (Student student : students) {
            result.append(student.toString()).append("\n");
        }
        return result.toString();
    }

    // 5. 请求头参数
    @GetMapping("/header")
    public String getStudentFromHeader(@RequestHeader("Student-ID") String studentId) {
        return "从请求头中获取到学生 ID 为 " + studentId + " 的信息";
    }

    // 6. Cookie 参数
    @GetMapping("/cookie")
    public String getStudentFromCookie(@CookieValue("Student-Name") String studentName) {
        return "从 Cookie 中获取到学生姓名为 " + studentName + " 的信息";
    }

    // 7. 表单参数
    @PostMapping("/form")
    public String addStudentFromForm(@ModelAttribute Student student) {
        return "通过表单添加学生:" + student.toString();
    }

// 8. 使用 Map 接收所有请求参数
    @PostMapping("/allParams")
    public String getAllParams(@RequestBody Map<String, Object> allParams) {
        StringBuilder result = new StringBuilder("接收到的所有参数:\n");
        for (Map.Entry<String, Object> entry : allParams.entrySet()) {
            result.append(entry.getKey()).append(": ").append(entry.getValue()).append("\n");
        }
        return result.toString();
    }
}

4. Postman 测试示例

4.1 路径参数

在这里插入图片描述

4.2 请求参数

4.3 请求体参数 - 接收单个学生对象

在这里插入图片描述

4.4 请求体参数 - 接收学生对象数组

在这里插入图片描述

4.5 请求头参数

在这里插入图片描述

4.6 Cookie 参数在这里插入图片描述
4.7 表单参数

在这里插入图片描述

4.8 Map接收所有参数

在这里插入图片描述

总结

以下是各种情况的总结:

参数位置/类型使用的注解/对象示例代码适用场景
URL查询参数@RequestParam@RequestParam String nameGET请求,URL中的?name=value形式参数
URL路径参数@PathVariable@PathVariable Long idRESTful风格URL,如/user/{id}
请求体(JSON/XML)@RequestBody@RequestBody User userPOST/PUT请求,接收JSON/XML格式的复杂对象
表单数据@ModelAttribute@ModelAttribute User user表单提交(x-www-form-urlencodedmultipart
请求头参数@RequestHeader@RequestHeader("User-Agent") String userAgent获取请求头中的特定字段
Cookie参数@CookieValue@CookieValue("JSESSIONID") String sessionId从Cookie中提取值
文件上传@RequestParam + MultipartFile@RequestParam MultipartFile file接收上传的文件(multipart/form-data
原生Servlet对象HttpServletRequest直接作为参数:(HttpServletRequest request)直接操作请求对象(如原生API交互)
默认参数值@RequestParam(defaultValue)@RequestParam(defaultValue = "0") int page参数可选时设置默认值
参数绑定到对象无注解或@ModelAttributepublic String method(User user)自动将参数绑定到POJO对象的属性
Map接收所有参数@RequestParam Map@RequestParam Map<String, String> params接收所有查询参数到Map中

补充说明:

  1. @ModelAttribute vs 无注解对象

    • 当方法参数是POJO对象时,Spring Boot会自动绑定请求参数到对象属性(隐式使用@ModelAttribute)。
    • 显式使用@ModelAttribute可自定义模型属性名称。
  2. 文件上传扩展

    • 多文件上传:@RequestParam List<MultipartFile> filesMultipartFile[]
  3. 其他注意事项

    • @RequestBody仅支持POST/PUT等有请求体的方法,且需指定Content-Type(如application/json)。
    • HttpServletRequest对象可直接获取参数、请求头、Session等原生功能。

通过这样一个例子,清晰地展现了 Spring Boot 接收参数的各种情况,希望对大家能有所帮助!创作不易,欢迎关注/点赞/收藏!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值