之前有整理过一次怎样包装SpringBoot Controller的做法。
最近在原有方案的基础上又升级了下,可以通过引入 spring-boot-starter 的形式对接口返回值进行封装。
具体做法如下:
1. 引入 zhy-spring-boot-starter 依赖
1 2 3 4 5 |
<dependency> <groupId>org.chobit.spring</groupId> <artifactId>zhy-spring-boot-starter</artifactId> <version>${version}</version> </dependency> |
同时需要确认已引入 spring-boot-starter-web 依赖。这样 zhy-spring-boot-starter 中的返回值封装组件才会生效。
2. 包装返回值
要封装返回值,只需要在接口类或接口方法上添加@ResponseWrapper
注解就可以了。
因为只需要对REST接口进行封装。所以组件只会对 接口类或接口方法 生效。
- 接口类指存在
@RestController
注解的类 - 接口方法指存在
@RestController
注解的类下的方法,或者存在@ResponseBody
方法
对其它的接口封装没有意义,封装后还容易出错,所以加了如上限定。
比如对在 public boolean login(String username, String password)
这样一个登录接口封装后的返回结果大致如:
1 2 3 4 5 |
{ "code": 0, "data": true, "msg": "" } |
其中 data 是接口方法的返回值。msg 是存在故障时的异常信息提示。code 是返回结果的状态码,这个状态码可以自定义:
1 2 3 |
rw: successCode: 0 #成功的code默认是0 failCode: 10000 #失败的code默认是10000 |
如果要调整接口返回值的code,可以在配置文件 application.yaml 中添加如上配置并做调整。
3. 包装异常信息
组件中提供了默认的异常封装能力。
其中自定义的业务异常需要继承 @RwException
或者直接使用 @RwException
这个异常类。封装后的返回值大致如:
1 2 3 4 |
{ "code": 10002, "msg": "用户名或密码错误" } |
除了业务异常外还对接口参数validator校验异常结果进行了封装。
1 2 3 4 |
{ "code": 10000, "msg": "年龄只能为纯数字" } |
参数校验失败时的code默认是 10000 。
以上两种异常是可控的业务异常,所以尽管接口返回json中的code值虽然不同,但是接口返回信息中的http status还是200。
此外还有可能会出现一些空指针异常之类的因为编程意外而产生的异常,此时的异常信息统一都是:
1 2 3 4 |
{ "code": 10000, "msg": "未知异常" } |
而且接口返回信息中的http status是500。
如果还想对异常做更进一步的处理,可以考虑禁用当前组件的异常封装能力,并自定义异常封装能力。
要实现禁用当前组件的异常封装能力可以在配置文件中添加如下配置:
1 2 |
rw: wrap-except: false |
目前就只需要做这些配置就够了。
如果想做些自定义的扩展可以参考源码:github / zhyea / zhy-spring-boot-starter
END!!
发表评论