Spring WebMVC 通过Controller类和框架注解,将方法封装为 Web 接口,为前端或其他系统提供信息交互通道。
Http协议相关的注解 | 功能 | 场景 | 实践 |
---|---|---|---|
@Controller | 支持带页面的返回形式 | 存在后端页面渲染的系统 | 实际中使用不多,不推荐 |
@RestController | 纯数据返回的形式(JSON or XML) | 前后端分离的系统,只返回数据 | 广泛使用 |
@RequestMapping | 将输入的URL映射到对应Controller方法 | 常用于类头规范类下面的请求映射 | /[类级映射URL]/[方法级映射URL] |
@GetMapping | 同@RequestMapping,只使用Get协议 | 读取对象 | 根据ID或者某个唯一信息获取某个对象信息 |
@PostMapping | 同@RequestMapping,只使用Post协议 | 创建对象、复杂查询或者触发指定业务行为 | 最常用的协议,通用性较强但是也容易被滥用 |
@PutMapping | 同@RequestMapping,只使用Put协议 | 修改对象 | Put协议和Post协议相比,不需要服务器返回值 |
@DeleteMapping | 同@RequestMapping,只使用Delete协议 | 删除对象 | 实际中用得不多,业务上也大都是软删除 |
接口的输入输出参数也有对应的注解进行控制。
Http协议相关的注解 | 功能 | 场景 | 实践 |
---|---|---|---|
@RequestBody | 将请求中的body体通过(JSON)反序列化成指定的Java模型 | 待创建/更新的对象信息 | 大量输入信息的传入 |
@PathVariable | 将URL路径中的一部分映射到方法的简单类型的参数上 | 抽取部分最关键的可变信息 | 通常用于从URL中抽取对象的ID |
@RequestParam | 将请求中的form体中的某个字段映射到方法的简单类型的参数上 | 少量且可选的附加信息 | 业务上用得不多 |
@RequestHeader | 将请求中的header体中的某个字段映射到方法的简单类型的参数上 | 一些通用的信息上下文 | 业务上用得不多,基本交给框架去处理一些技术信息 |
@ResponseStatus | 指定方法默认返回的http state码 | 部分非主流程信息的返回 | 业务上用得不多 |
REST 风格的接口编程
传统风格URL | 传统风格请求类型 | REST风格URL | REST风格请求类型 |
---|---|---|---|
/user/searchAll?name=bill | GET | /user?name=bill | GET |
/user/findOneById?id=1 | GET | /user/1 | GET |
/user/createOne | POST | /user | POST |
/user/updateOne?id=1 | POST | /user/1 | PUT |
/user/deleteOne?id=1 | POST | /user/1 | DELETE |