如何使用 Spring MVC 实现 RESTful API 接口

一、RESTful 核心概念

1. 请求类型与操作对应关系

  • POST → 新增数据
  • PUT → 修改数据
  • GET → 查询数据
  • DELETE → 删除数据

2. RESTful 设计原则

  • 路径代表资源(使用名词,不用动词)
  • 请求类型代表动作
  • 浏览器默认发送 GET 请求

二、传统传参 vs RESTful 传参

传统方式(查询参数)

ini 复制代码
https://google.com/search?q=keyword&page=1
  • 使用 ?& 拼接参数

RESTful 风格(路径参数)

bash 复制代码
/api/users/123
  • 参数值直接放在路径中
  • 使用 / 分隔多个参数
  • 不需要参数名

三、Spring MVC 实现示例

1. 无参 GET 请求

java 复制代码
@RestController
@RequestMapping("/api")
public class ApiController {
    
    @GetMapping("/test")
    public String getNoParam() {
        return "无参GET请求API接口方法";
    }
}

2. RESTful 风格带参 GET 请求

java 复制代码
@GetMapping("/user/{id}")
public String getWithPathParam(@PathVariable String id) {
    return "RESTful请求传值方法,ID: " + id;
}

访问路径:/api/user/123

3. 传统方式带参 GET 请求

java 复制代码
@GetMapping("/user")
public String getWithQueryParam(@RequestParam String id) {
    return "GET普通请求传值方法,ID: " + id;
}

访问路径:/api/user?id=123

4. POST 请求(接收请求体)

java 复制代码
@PostMapping("/save")
public String postMethod(@RequestBody Map<String, Object> map) {
    return "POST请求接收成功: " + map;
}

5. PUT 请求

java 复制代码
@PutMapping("/update/{id}")
public String putMethod(@PathVariable String id, @RequestBody Map<String, Object> map) {
    return "PUT请求接收成功,ID: " + id + ", 数据: " + map;
}

6. DELETE 请求

java 复制代码
@DeleteMapping("/delete/{id}")
public String deleteMethod(@PathVariable String id) {
    return "DELETE请求接收成功,ID: " + id;
}

四、关键注解说明

  • @RestController : 组合注解,包含 @Controller@ResponseBody
  • @RequestMapping: 类级别的路径映射
  • @GetMapping/@PostMapping/@PutMapping/@DeleteMapping: 方法级别的请求映射
  • @PathVariable: 从路径中获取参数值
  • @RequestParam: 从查询参数中获取值
  • @RequestBody: 从请求体中获取数据

五、测试工具

  • API Fox
  • Postman
  • 其他接口调试工具

六、Spring MVC 匹配机制

Spring MVC 会根据:

  1. 请求类型(GET/POST/PUT/DELETE)
  2. 请求路径
  3. 参数传递方式

自动匹配对应的控制器方法。

实际开发建议

  1. 保持 RESTful 风格的一致性
  2. 合理设计资源路径(使用名词)
  3. 根据操作类型选择合适的 HTTP 方法
  4. 在实际项目中,这些方式都会用到,根据场景灵活选择
相关推荐
linweidong1 分钟前
C++ 中避免悬挂引用的企业策略有哪些?
java·jvm·c++
用户93761147581613 分钟前
并发编程三大特性
java·后端
阿在在4 分钟前
Spring 系列(二):加载 BeanDefinition 的几种方式
java·后端·spring
颜酱6 分钟前
前端算法必备:双指针从入门到很熟练(快慢指针+相向指针+滑动窗口)
前端·后端·算法
小当家.10512 分钟前
Maven与Gradle完整对比指南:构建工具深度解析
java·gradle·maven
p***s9115 分钟前
Spring Boot项目接收前端参数的11种方式
前端·spring boot·后端
AI架构师之家18 分钟前
一文分清机器学习、深度学习和各类 AI 工具的关系:心法与招式的区别
后端·ai编程
neoooo19 分钟前
🍃Spring Boot 多模块项目中 Parent / BOM / Starter 的正确分工
java·后端·架构
黄金贼贼20 分钟前
2026最新java单元测试json校验器
java·单元测试·json
菜鸟的迷茫20 分钟前
为了防雪崩加了限流,结果入口先挂了
java·后端·架构