package com.walker.web; import com.walker.infrastructure.utils.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 定义在WEB层异常统一处理的机制。 * @author 时克英 * @date 2022-10-12 */ @RestControllerAdvice public class GlobalExceptionHandler { protected final transient Logger logger = LoggerFactory.getLogger(this.getClass()); private static final String ERROR_MESSAGE = "系统内部异常"; /** * 定义统一处理业务在WEB中抛出的运行异常。 *
     *     1) 在 Controller 层中,通常不会抛出运行异常,只有特定情况下,这是一种处理方式。
     *     2) 在 Controller 层中,开发人员想直接使用 Transaction 数据库事务,此时需要抛出异常中断事务。
     * 
* @param request * @param e * @param response * @return */ @ExceptionHandler(WebRuntimeException.class) public ResponseValue webRuntimeExceptionHandler(HttpServletRequest request, final Exception e, HttpServletResponse response){ response.setCharacterEncoding(StringUtils.DEFAULT_CHARSET_UTF8); response.setContentType(Constants.APPLICATION_JSON); response.setStatus(Constants.HTTP_SUCCESS); WebRuntimeException webRuntimeException = (WebRuntimeException)e; String error = webRuntimeException.getMsg(); if(StringUtils.isEmpty(error)){ error = ERROR_MESSAGE; } logger.error("业务抛出web异常:" + webRuntimeException.getMessage(), e); // return ResponseValue.error(webRuntimeException.getCode(), error); return ResponseValue.exception(); } @ExceptionHandler(RuntimeException.class) public ResponseValue runtimeExceptionHandler(HttpServletRequest request, final Exception e){ // response.setCharacterEncoding(StringUtils.DEFAULT_CHARSET_UTF8); // response.setContentType(Constants.APPLICATION_JSON); // response.setStatus(Constants.HTTP_SUCCESS); // WebRuntimeException webRuntimeException = (WebRuntimeException)e; // String error = e.getMsg(); // if(StringUtils.isEmpty(error)){ // error = ERROR_MESSAGE; // } logger.error("请求地址'{}',发生运行异常.", request.getRequestURI(), e); // return ResponseValue.error(e.getMessage()); return ResponseValue.exception(); } @ExceptionHandler(Exception.class) public ResponseValue exceptionHandler(HttpServletRequest request, final Exception e){ logger.error("请求地址'{}',发生系统异常.", request.getRequestURI(), e); // return ResponseValue.error(e.getMessage()); return ResponseValue.exception(); } }