当前位置: 首页 > news >正文

前端传来的不同类型参数,后端 SpringMVC 怎么接收?

SpringMVC 处理前端请求参数的方式主要有 4 种常见情况:

参数来源前端传递方式后端接收方式示例
1. 路径参数PathVariable/user/1001@PathVariable@GetMapping("/user/{id}")
2. 查询参数RequestParam/user?id=1001@RequestParam@GetMapping("/user")
3. 请求体参数RequestBody{ "id": 1001, "name": "张三" }(JSON)@RequestBody@PostMapping("/user")
4. 表单参数RequestParamname=张三&age=22x-www-form-urlencoded@RequestParamJava 对象@PostMapping("/user")

📌 1. 路径参数(@PathVariable)

👉 场景:前端把参数放到 URL 里(RESTful 风格)
📌 示例:查询 id=1001 的用户

  • 前端请求

  • GET /user/1001
    @GetMapping("/user/{id}")
    public Result<User> getUserById(@PathVariable Long id) {
        return Result.success(userService.getById(id));
    }

  • 特点

    • @PathVariable 把 URL 里的 {id} 取出来,自动转成 Java 类型。

    • 适合 RESTful API 设计,比如 /user/1001

2. 查询参数(@RequestParam)

👉 场景:前端以 ?key=value 形式传参(URL 查询参数)
📌 示例:查询 id=1001 的用户

  • 前端请求

  • GET /user?id=1001
    @GetMapping("/user")
    public Result<User> getUserById(@RequestParam("id") Long id) {
        return Result.success(userService.getById(id));
    }

  • 特点

    • @RequestParam("id") 从 URL 查询参数获取值

    • 如果前端没传 id,SpringMVC 会报错(可以加 required = false 设置为可选)。

    • 适用于 简单查询参数,如 /search?keyword=apple&sort=desc

📌 多个参数的情况

@GetMapping("/search")
public Result<List<User>> search(@RequestParam String name, @RequestParam(required = false) Integer age) {
    return Result.success(userService.search(name, age));
}

请求:

GET /search?name=张三&age=22
 

📌 3. 请求体参数(@RequestBody)

👉 场景:前端提交 JSON 数据,后端解析成 Java 对象
📌 示例:前端提交用户信息

  • 前端请求(POST 请求,JSON 数据):

  • {
      "id": 1001,
      "name": "张三",
      "phone": "1234567890"
    }
    @PostMapping("/user")
    public Result createUser(@RequestBody UserDTO userDTO) {
        userService.create(userDTO);
        return Result.success();
    }

    特点

  • @RequestBody 接收 JSON 数据,并自动解析成 Java 对象

  • 适用于 POST、PUT 请求,比如用户注册、订单提交。

4. 表单参数(@RequestParam 或 Java 对象)

👉 场景:前端以 x-www-form-urlencoded 方式提交表单数据
📌 示例:用户提交表单

  • 前端请求

    POST /user
    Content-Type: application/x-www-form-urlencoded
    
    name=张三&age=22
    后端处理(方式 1:单个参数用 @RequestParam)@PostMapping("/user")
    public Result createUser(@RequestParam String name, @RequestParam Integer age) {
        return Result.success();
    }
    
  • 后端处理(方式 2:封装成 Java 对象)
  • @PostMapping("/user")
    public Result createUser(UserDTO userDTO) {
        return Result.success();
    }
     
  • 这里 不用 @RequestParam,SpringMVC 会自动把表单数据映射到 UserDTO

综合案例

后端方法:支持 GETPOST

@RestController
@RequestMapping("/user")
public class UserController {
    // 查询用户(路径参数)
    @GetMapping("/{id}")
    public Result<User> getUserById(@PathVariable Long id) {
        return Result.success(userService.getById(id));
    }

    // 查询用户(查询参数)
    @GetMapping
    public Result<User> getUserById(@RequestParam("id") Long id) {
        return Result.success(userService.getById(id));
    }

    // 创建用户(JSON 请求体)
    @PostMapping
    public Result createUser(@RequestBody UserDTO userDTO) {
        userService.create(userDTO);
        return Result.success();
    }

    // 更新用户(表单提交)
    @PostMapping("/update")
    public Result updateUser(UserDTO userDTO) {
        userService.update(userDTO);
        return Result.success();
    }
}

 

🔹 总结

参数来源传输方式后端注解适用场景
路径参数/user/1@PathVariableRESTful API,用户详情
查询参数/user?id=1@RequestParam搜索、分页、简单查询
请求体 JSON{ "id": 1, "name": "张三" }@RequestBody创建、更新数据(POST/PUT)
表单参数name=张三&age=22@RequestParam 或 Java 对象普通表单提交

相关文章:

  • 微信小程序中使用Less样式方法
  • SSH项目负载均衡中的Session一致性解决方案‌
  • GESP2025年3月认证解析
  • Filnk运行模式
  • 智算中心系统化建设与运营框架
  • 矩阵补充,最近邻查找
  • python基础之--包和模块
  • python3面试题16个(系统编程)
  • 蓝桥杯备考:图的遍历
  • ZW3D二次开发_非模板表单_输入框类控件_逐字符回调
  • 线程控制与线程操作
  • 思库拉水厂开业庆典千人大会回顾
  • 简记_FPGA 硬件最小系统设计
  • 案例分享|树莓派媒体播放器,重构商场广告的“黄金三秒”
  • Transformer-based 1-Dimensional Tokenizer (TiTok):一种革命性的1D图像分词方法(代码实现)
  • LLaMA Factory对大模型微调和导出量化操作
  • ElementPlus 快速入门
  • 当科技业成为系统性压榨的绞肉机
  • PostgreSQL_数据使用与日数据分享
  • 如何修改SQL2008 账号SA的密码
  • 中共中央、国务院关于表彰全国劳动模范和先进工作者的决定
  • 俄乌战火不熄,特朗普在梵蒂冈与泽连斯基会晤后口风突变
  • 药明康德一季度净利增长89%,在手订单增超四成至523亿元
  • 夜读丨怀念那个写信的年代
  • 苏州一季度GDP为6095.68亿元,同比增长6%
  • 物业也能成为居家养老“服务员”,上海多区将开展“物业+养老”试点