如何使用 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. 在实际项目中,这些方式都会用到,根据场景灵活选择
相关推荐
Victor3562 分钟前
MongoDB(72)如何创建用户和角色?
后端
Victor3565 分钟前
MongoDB(71)如何启用MongoDB身份验证?
后端
想打游戏的程序猿11 分钟前
工具与协议层——Agent 如何连接世界
后端·ai编程
希望永不加班26 分钟前
SpringBoot 过滤器(Filter)与请求链路梳理
java·spring boot·后端·spring
Lyyaoo.28 分钟前
【JAVA基础面经】抽象类/方法与接口
java·开发语言
0xDevNull32 分钟前
Java实现Redis延迟队列:从原理到高可用架构
java·开发语言·后端
糖炒栗子032634 分钟前
Go 语言环境搭建与版本管理指南 (2026)
开发语言·后端·golang
于先生吖36 分钟前
无人共享健身房 Java 后端源码 + 多端对接完整方案
java·开发语言
恼书:-(空寄42 分钟前
Spring 事务失效的 8 大场景 + 原因 + 解决方案
java·后端·spring
我是若尘44 分钟前
我的需求代码被主干 revert 了,接下来我该怎么操作?
前端·后端·代码规范