package com.dtb.portal.exception; import com.dtb.portal.controller.view.RestResponse; import com.dtb.portal.util.CodeDefault; import com.google.common.base.Strings; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.ServletRequestBindingException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * 全局异常处理 */ @RestControllerAdvice @ControllerAdvice @Slf4j public class GlobalExceptionHandler { /** * controller 参数转化时, 主要从这里捕获错误信息 * * @param request 请求 * @param e 错误信息 * @return 请求结果 */ @ExceptionHandler(value = ServletRequestBindingException.class) @ResponseBody public RestResponse exception(HttpServletRequest request, ServletRequestBindingException e) { RestResponse exception = RestResponse.exception(CodeDefault.ILLEGAL_ARGUMENT); log.error("请求参数错误: {}", exception, e); return exception; } /** * NPE处理 * * @param request 请求 * @param npe 错误信息 * @return 请求结果 */ @ExceptionHandler(value = NullPointerException.class) @ResponseBody public RestResponse exception(HttpServletRequest request, NullPointerException npe) { /* RestResponse exception = RestResponse.exception(CodeDefault.NULL_POINT_ERROR); if (!Strings.isNullOrEmpty(npe.getMessage())) { exception.setMessage(npe.getMessage()); } Map extras = new HashMap<>(0); StackTraceElement stackTraceElement = npe.getStackTrace()[0]; extras.put("class", stackTraceElement.getClassName()); extras.put("method", stackTraceElement.getMethodName()); extras.put("lineNumber", stackTraceElement.getLineNumber()); exception.setExtraInfo(extras); log.error("NullPointerException: {}", exception, npe);*/ String errMessage = npe.getMessage(); if (StringUtils.isNotBlank(errMessage)) { errMessage = errMessage.split(":")[1].replaceAll(" ",""); } return RestResponse.ok(errMessage); } /** * 这个兜底 * * @param request 请求 * @param e 错误信息 * @return 请求结果 */ @ExceptionHandler(value = RuntimeException.class) @ResponseBody public RestResponse exception(HttpServletRequest request, RuntimeException e) { String errMessage = e.getMessage(); log.error("RuntimeException :",errMessage); /* if (StringUtils.isNotBlank(errMessage)) { errMessage = errMessage.split(":")[1].replaceAll(" ",""); }*/ if (errMessage.equals("会话超时,请重新登录")) { return RestResponse.timeOut(errMessage); } if (errMessage.equals("验证失败,请重新登录后使用")) { return RestResponse.timeOut(errMessage); } if (errMessage.equals("未登录")) { return RestResponse.noToken(errMessage); } return RestResponse.exception(errMessage); } @ExceptionHandler(value = Exception.class) @ResponseBody public RestResponse exception(HttpServletRequest request, Exception e) { String errMessage = e.getMessage(); /* if (StringUtils.isNotBlank(errMessage)) { errMessage = errMessage.split(":")[1].replaceAll(" ",""); }*/ log.error("==============>Exception :",e); return RestResponse.exception(errMessage); } }