如何使用 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. 在实际项目中,这些方式都会用到,根据场景灵活选择
相关推荐
bobogift7 小时前
【玩转全栈】----Django基本配置和介绍
java·后端
岁月玲珑7 小时前
ComfyUI如何配置启动跳转地址127.0.0.1但是监听地址是0.0.0.0,::
java·服务器·前端
007php0078 小时前
某游戏互联网大厂Java面试深度解析:Java基础与性能优化(一)
java·数据库·面试·职场和发展·性能优化·golang·php
倚栏听风雨8 小时前
Async-Profiler 框架简介
后端
qianbailiulimeng8 小时前
2019阿里java面试题(一)
java·后端
码事漫谈8 小时前
虚函数指针与虚函数表:C++多态的实现奥秘
后端
Moment8 小时前
Cursor 2.0 支持模型并发,我用国产 RWKV 模型实现了一模一样的效果 🤩🤩🤩
前端·后端·openai
码事漫谈8 小时前
写博客实用工具!5分钟使用ShareX实现步骤批量截图
后端
Bug退退退1238 小时前
ArrayList 与 LinkedList 的区别
java·数据结构·算法
狂炫冰美式8 小时前
QuizPort 1.0 · 让每篇好文都有测验陪跑
前端·后端·面试