Spring-全局异常拦截
程序员文章站
2022-04-13 13:39:23
Spring MVC那一篇里提到了异常拦截来做参数校验返回,那里是对特定的 controller 做异常捕捉,但是我们也可以选择全局拦截处理 快速开始 @ResponseBody @ControllerAdvice public class ExceptionAdvice { private sta ......
spring mvc那一篇里提到了异常拦截来做参数校验返回,那里是对特定的 controller 做异常捕捉,但是我们也可以选择全局拦截处理
快速开始
@responsebody @controlleradvice public class exceptionadvice { private static logger logger = loggerfactory.getlogger(exceptionadvice.class); /*** * 参数绑定异常 * @date 2018/10/16 * @param exception httpmessagenotreadableexception */ @responsestatus(httpstatus.bad_request) @exceptionhandler(httpmessagenotreadableexception.class) public result<long> messagenotreadable(httpmessagenotreadableexception exception){ invalidformatexception formatexception = (invalidformatexception)exception.getcause(); list<jsonmappingexception.reference> e = formatexception.getpath(); string fieldname = ""; for (jsonmappingexception.reference reference :e){ string fieldname = reference.getfieldname(); } logger.error("参数不匹配"+exception); return result.createfailresult(fieldname+"参数类型不匹配"); } /*** * 全局异常,如果没有匹配到上述准确的异常,都会到这里来处理 * @date 2018/10/16 * @param e 没有匹配到的全局异常 */ @responsestatus(httpstatus.bad_request) @exceptionhandler(exception.class) public result<string> all(exception e){ //这里的log使用了“,”,这样能把异常的堆栈信息全部打印出来,更容易定位bug logger.error("异常:",e); return result.createfailresult("工程抢救中……请稍后再试"); } }
@controlleradvice
@controlleradvice 默认监控所有的 @requestmapping 方法,也可以对指定过滤的条件:
// 监控所有的被@restcontroller注解的controllers类 @controlleradvice(annotations = restcontroller.class) // 监控特定的包下的controllers类 @controlleradvice("org.example.controllers") // 监控指定类的controllers类 @controlleradvice(assignabletypes = {controllerinterface.class, abstractcontroller.class})