该示例演示了基于 spring web 和 jdbc 的 rest api。
应用分层(自顶向下)
- controller 控制层,暴露rest api,接收前端请求
- service 服务层,具体的业务逻辑,处理控制层下发的请求
- repository 持久层,操作数据库表的方法
- entity 数据表对象,与数据库里面的表结构一致。同时出现在控制层、服务层、持久层。这点存疑,不知道这样设计是否合理
其他目录:
- exception 自定义异常
- advice 全局异常处理,同一封装异常响应结果
- dto 定义数据传输对象,与前端交互。dto只出现在控制层
- response 统一的响应代码和格式
- util 辅助工具类
关键点
- 前后端对错误码的约定,见
ResponseCode
。一种说法是复用http code,但是我查看了《阿里巴巴开发手册》等资料,说http code只能表示服务的状态,不能表示业务的状态。要表示业务的状态,还是需要自定义错误码。 - 异常信息层层上报。repository -> service -> controller,最终展示给前端用户。本项目通过
@RestControllerAdvice
实现 - 分页查询
- 如何实现部分更新:比如一张表10个字段,前端传了一个对象过来,只改了2个字段,其余字段为空。更新时,不能将空的值写入数据库。
这里要么做一个空值检查;要么与前端约定,不传空值到后端,没修改的字段也一起传过来,浪费一点带宽。 - my.ini 需配置
explicit_defaults_for_timestamp=OFF
,timestamp类型的字段为NULL时才会自动插入当前值 【MySQL】explicit_defaults_for_timestamp 参数详解 - SegmentFault 思否
如何运行
- 准备一个mysql。建表语句在resources目录下
- 运行test目录下的测试用例,会生成一些测试数据
- 启动项目(MainApp),访问 http://localhost:8081/swagger-ui/index.html 查看和测试REST API