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

前端传来的不同类型参数,后端 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 对象普通表单提交

http://www.kler.cn/a/599639.html

相关文章:

  • 【Unity Shader编程】之透明物体渲染
  • 【VUE】day07 路由
  • FFmpeg6.1.1 MSYS2+GCC 源码编译
  • 【Java SE】单例设计模式
  • ngx_http_core_server_name
  • RocketMQ 面试备战指南
  • 在 IntelliJIDEA中实现Spring Boot多实例运行:修改配置与批量启动详解
  • java实现coze平台鉴权+工作流调用(踩坑记录)
  • Springboot的jak安装与配置教程
  • java版嘎嘎快充玉阳软件互联互通中电联云快充协议充电桩铁塔协议汽车单车一体充电系统源码uniapp
  • 0324-项目
  • 豆包AI插件:提升浏览器使用效率的智能助手
  • 10分钟打造专属AI助手!ToDesk云电脑/顺网云/海马云操作DeepSeek哪家强?
  • 笔记:代码随想录算法训练营day60:并查集理论基础、寻找存在的路径
  • vue2中引入elementui
  • Qt在ARM中,如何使用drmModeObjectSetProperty 设置 Plane 的 zpos 值
  • 在 Kubernetes 中部署 Trivy 漏洞扫描服务
  • 地理信息系统(GIS)在智慧城市中的40个应用场景案例
  • BSides Vancouver 2018靶机通关教学
  • ROS2下MoveIt+Rviz+MuJoCo 三剑合璧!Panda 机械臂联动仿真!