1、背景
在项目开发中,很多时候会写一个restful接口,对于此类接口为了前端方便处理,会额外增加一些标识状态的字段,比如seccess、status等,或者异常信息,body为实际内容,比如以下bean:
public class MyRestfullBody<T> {
private int status;
private T body;
private String msg;
}
当然,完成这个功能的方式挺多的,现在我只是记录下RestControllerAdvice+ResponseBodyAdvice实现。
2、环境搭建
我直接使用的Springboot、按照官网运行最简单的Springboot应用就ok了:
POM
启动类
运行结果:
3、处理返回结果
RestControllerAdvice通过表面意思就知道这个是对 RestController 的一些建议,对应的有 ControllerAdvice和 Controller 。 (RestController 可以简单的理解为 Controller +ResponseBody。)
RestController 虽然没有显示的使用 ResponseBody ,实际上是使用了 ResponseBody 流程的,现在我们要做的就是在 RestControllerAdvice 加上 ResponseBodyAdvice:
ResponseBodyAdvice 这个接口有两个方法:
判断这个 Advice 适合那些 Controller ,返回true,代表所有。
另一个方法就是我们要处理的核心了
看代码,就是把body封装了下,挺简单的。这儿有个主意点,就是图中的if,通过查看源码,Spring把String和其他对象分开处理的,如果body是String,封装后返回的对象会报ClassCaseException。
重新运行,结果:
测试List:
结果满意。
4、异常处理
异常处理借助ExceptionHandler,这个应该没问题,大多数人都会用
在上面MyControllerAdvice类中加入:
测试代码:
运行结果:
我对结果不咋满意。
我改成了下面这种方式:
运行结果:
看上去还行:msg为异常消息,因为我这儿异常消息为空,所以是异常类名。
5、通过上面的方式,500异常算是处理了,现在谈谈404
处理404可以实现ErrorController:
运行结果:(有问题哈,status为success)
以上,希望能给你们提供一些帮助。