深圳企业网站建设公司,网站的特征包括哪些,wordpress管理微信公众号,怎么开展网络营销推广引言
前后端分离开发#xff0c;后台有时候会出现不可预知的异常#xff08;运行时异常#xff09;#xff0c;在实际生产中通常需要统一返回符合一定响应结构的异常信息给前端#xff0c;这一方面可以避免用户看到后台的报错信息#xff0c;一方面也是保护后端程序免受…引言
前后端分离开发后台有时候会出现不可预知的异常运行时异常在实际生产中通常需要统一返回符合一定响应结构的异常信息给前端这一方面可以避免用户看到后台的报错信息一方面也是保护后端程序免受恶意用户的试探。
简单总结一个Spring框架下的全局异常捕获的实现方式——RestControllerAdvice。
一、代码演示
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;/*** 统一异常捕获类*/
Slf4j
RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {ExceptionHandler(RuntimeException.class)public CommonResp runtimeExceptionProcess(Exception e) {log.error(统一异常捕获{}, e.getMessage());e.printStackTrace();CommonResp resp new CommonResp(9999, 服务器异常);log.info(统一异常响应{}, resp);return resp;}
}二、RestControllerAdvice
Advice在AOP编程中代表了切面的执行逻辑相当于 OOP 中的方法。
RestControllerAdvice 是 Spring 3.2引入的一个协助 Controller 层织入切面逻辑的AOP注解标记类上类似的注解还有ControllerAdvice。二者的区别是前者只用于基于REST API风格的 JSON响应结果的controller简单的说ControllerAdvice ResponseBody RestControllerAdvice 。
ControllerAdvice
public class MyControllerAdvice {ResponseBodyExceptionHandler(value Exception.class)public Map errorHandler(Exception ex) {// 异常处理逻辑return map;}
}
三、ResponseEntityExceptionHandler
ResponseEntityExceptionHandler 包装了各种Spring MVC在处理请求时可能抛出各类异常的处理通过对该类的继承我们可以重写对应的处理逻辑。
比如我们可以通过继承该类在我们的RestControllerAdvice 类中重写 handleBindException(..) 方法来处理数据绑定的异常信息。
当然第一节中的代码案例其实并不需要继承 ResponseEntityExceptionHandler 但也可以作为一种附加参考方便以后对特定异常进行扩展当然也可以自定义异常来处理。