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(...) { ... } |

相关推荐
我命由我123452 小时前
Android 开发问题:Unresolved reference: kapt
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
心勤则明2 小时前
基于Spring AI Alibaba的监督者模式实践
人工智能·python·spring
用户298698530142 小时前
Java 实现 ODT 转 PDF:一种简洁的技术实现方案
java·后端
城管不管2 小时前
EasyExcel
java·开发语言·后端·easyexcel
鉴生Eric2 小时前
拉孚BMA系统物联网架构:全面赋能传统楼宇BA系统的数字化转型
java·后端·struts
1368木林森2 小时前
深入浅出:JDK1.7→JDK1.8 HashMap进化史,再到ConcurrentHashMap的并发救赎
java·开发语言
web3.08889992 小时前
tb关键词API接口——解锁独一无二的商品
java·数据库·https
敖正炀2 小时前
集合-Map深入分析
java
小谢小哥2 小时前
51-限流算法详解
java·后端·架构