如何使用 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. 在实际项目中,这些方式都会用到,根据场景灵活选择
相关推荐
诺伦3 分钟前
Rust 错误处理实战:从 unwrap 到优雅 Result 的进阶之路
开发语言·后端·rust
不能放弃治疗1 小时前
上下文压缩机制
后端
QQ_21696290961 小时前
【项目编号:project95315】SpringBoot公共自习室管理系统:座位预约、房间管理、签到核销、公告规则完整实战
java·spring boot·后端
凤山老林1 小时前
高可用服务容错架构:Spring Boot 集成 Resilience4j 实战指南
spring boot·后端·架构·resilience4j
手握风云-1 小时前
Spring Cloud:分布式系统的“粘合剂”(五)
后端·spring·spring cloud
早点睡9751 小时前
Python 上下文管理器深度剖析:从 with 语法糖到 CPython 底层协议
后端·面试
嵌入式阿蔡1 小时前
面试高频考点 01:volatile / 中断 / 堆栈 八股精讲
java·面试·职场和发展·嵌入式实时数据库
Cache技术分享1 小时前
503. Java 反射 - 编写 ServiceFactory 类
前端·后端
高频因子挖掘机1 小时前
QuantDash 成交量单位统一实战:从“手”到“股”的跨市场量化数据清洗全流程
后端·算法·github
码农看码2 小时前
Spring Boot 启动到响应:一个 HTTP 请求是怎么走到 Controller 的?
后端