RESTful 语法规范 核心注解详解

二、RESTful 语法规范

2.1 URL 命名规则

URL 命名规则:

  • 名词复数 表示资源集合:/api/users(用户列表)、/api/orders(订单列表)
  • 路径参数 表示单个资源:/api/users/1(ID=1 的用户)
  • 避免 URL 包含动词:/api/getUser(不推荐)、/api/deleteUser(不推荐)
  • 查询参数 实现过滤 / 分页:/api/users?page=1&size=10(分页查询用户)

2.2 HTTP 方法与操作映射

|-------------|----------|-----------------------|-----------------------|
| HTTP 方法 | 操作含义 | 示例 URL | 说明 |
| GET | 查询资源 | GET /api/users | 查询所有用户 |
| GET | 查询资源 | GET /api/users/1 | 查询 ID=1 的用户 |
| POST | 创建资源 | POST /api/users | 新增用户(请求体含用户信息) |
| PUT | 全量更新 | PUT /api/users/1 | 更新 ID=1 的用户(请求体含完整信息) |
| DELETE | 删除资源 | DELETE /api/users/1 | 删除 ID=1 的用户 |

2.3 案例:用户 API 设计

|----------|----------|-------------------|------------------------------------------------|----------------------------------------------|
| 接口功能 | 请求方法 | URL | 请求体 | 响应体 |
| 查询所有用户 | GET | /api/users | 无 | {"code":200,"message":"成功","data":[用户列表]} |
| 查询单个用户 | GET | /api/users/{id} | 无 | {"code":200,"message":"成功","data":用户对象} |
| 新增用户 | POST | /api/users | {"name":"张三","email":"zs@test.com","age":20} | {"code":201,"message":"创建成功","data":新用户对象} |
| 更新用户 | PUT | /api/users/{id} | {"name":"张三","email":"zs@new.com","age":21} | {"code":200,"message":"更新成功","data":更新后用户} |
| 删除用户 | DELETE | /api/users/{id} | 无 | {"code":200,"message":"删除成功","data":null} |

三、核心注解详解

3.1 控制器相关注解

|-------------------|-----------------------------------------------------------|-----------------------------------------------------------------------------------------|
| 注解 | 作用 | 案例 |
| @RestController | 标识 REST 控制器(= @Controller+ @ResponseBody),所有方法返回 JSON | @RestController @RequestMapping("/api/users") public class UserController { ... } |
| @GetMapping | 简化 GET 请求映射(等价于 @RequestMapping(method=GET)) | @GetMapping public Result<List<User>> getAllUsers() |
| @PostMapping | 简化 POST 请求映射 | @PostMapping public Result<User> addUser(...) |
| @PutMapping | 简化 PUT 请求映射 | @PutMapping("/{id}") public Result<User> updateUser(...) |
| @DeleteMapping | 简化 DELETE 请求映射 | @DeleteMapping("/{id}") public Result<Void> deleteUser(...) |

3.2 参数绑定注解

|-----------------|-----------------------------------------|----------------------------------------------------------------------------------------|
| 注解 | 作用 | 案例 |
| @PathVariable | 绑定 URL 路径参数(如 /users/{id}中的 id) | @GetMapping("/{id}") public Result<User> getUser(@PathVariable Integer id) { ... } |
| @RequestBody | 接收请求体中的 JSON 数据并转为 Java 对象 | @PostMapping public Result<User> addUser(@RequestBody User user) { ... } |
| @RequestParam | 获取 URL 查询参数(如 /users?page=1中的 page) | @GetMapping public Result<List<User>> getUsers(@RequestParam int page) { ... } |

3.3 异常处理注解

|---------------------|-----------------------|--------------------------------------------------------------------------------------------------------|
| 注解 | 作用 | 案例 |
| @ControllerAdvice | 标识全局异常处理类,可捕获所有控制器的异常 | @ControllerAdvice public class GlobalExceptionHandler { ... } |
| @ExceptionHandler | 定义异常处理方法,指定处理的异常类型 | @ExceptionHandler(ResourceNotFoundException.class) public Result<Void> handleNotFound(...) { ... } |

相关推荐
unicrom_深圳市由你创科技6 小时前
基于Spring AI框架的RAG应用
人工智能·spring·机器学习
Jinkxs7 小时前
Java 跨域14-Java 与区块链(Hyperledger)集成
java·开发语言·区块链
晨曦中的暮雨8 小时前
Golang速通(Javaer版)
java·开发语言·后端·golang
七老板的blog8 小时前
当 Spring StateMachine 遇见大模型:构建工业级 AI 写作流水线
java·人工智能·spring
云烟成雨TD8 小时前
Spring AI 1.x 系列【46】MCP Security 模块
java·人工智能·spring
CRMEB系统商城8 小时前
CRMEB多商户系统(Java)v2.3公测版发布
java·开发语言·人工智能·小程序·开源·php
sinat_255487819 小时前
第七部分。介绍MVC(模型-视图-控制器)模式
java·ide·http·tomcat·intellij-idea
李白的天不白9 小时前
ps -ef | grep java
java
ab_dg_dp9 小时前
Android 17+ 提取 AIDL 生成 Java 文件的实用脚本
android·java·python
超哥--9 小时前
B站视频内容智能分析系统(三):B站视频自动采集
java·开发语言·音视频·ai编程