自定义全局异常捕获返回封装结果
程序员文章站
2022-05-29 18:58:00
...
写代码的时候每个发放都try catch捕获异常的话,会做许多重复代码,这里可以自定义统一捕获异常然后返回数据
package com.XX.XX.aop;
import com.XX.common.exception.BusinessException;
import com.XX.util.ResultData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.HandlerMethod;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
* 异常处理器
*
*/
@Slf4j
@RestControllerAdvice
public class ExceptionHandler {
/**
* 自定义业务异常捕捉 没有登录用户信息
*
* @param e
* @return com.fable.palm.util.ResultData
*/
@ExceptionHandler(BusinessException.class)
public ResultData exceptionHandler(HttpServletRequest request, HandlerMethod method, BusinessException e) {
ResultData resultData = new ResultData();
// 取自定义编码和信息
resultData.setSuccess(false);
resultData.setCode(e.getCode());
resultData.setMessage(e.getMessage());
// 处理组装系统异常信息日志
dealExceptionMessage(request, method, e);
return resultData;
}
/**
* 全局自定义异常捕获 同一封装成系统错误
*
* @param e
* 异常
* @return com.fable.palm.util.ResultData
*/
@ExceptionHandler(Exception.class)
public ResultData exceptionHandler(Exception e, HttpServletRequest request, HandlerMethod method) {
ResultData resultData = new ResultData();
resultData.setSuccess(false);
resultData.setCode(500);
resultData.setMessage("系统异常,请稍候再试");
// 处理组装系统异常信息日志
dealExceptionMessage(request, method, e);
return resultData;
}
/**
*
* @desc 打印自定义异常信息日志,便于定位问题
* @param request
* @param method
* @param e
*/
private void dealExceptionMessage(HttpServletRequest request, HandlerMethod method, Exception e) {
// 定义入参信息
Map<String, Object> paramMap = new HashMap<>(16);
// 循环获取入参集合
request.getParameterMap().forEach((key, value) -> paramMap.put(key, value[0]));
// 获取类名全路径
String classFullName = method.getBean().getClass().getName();
// 截取最后的类名
String className = classFullName.substring(classFullName.lastIndexOf(".") + 1);
// 组装接口和类名
String methodName = className + "." + method.getMethod().getName();
// 日志打印
log.error("异常方法名称:{},请求入参:{},异常内容:{}", methodName, paramMap.toString(), e);
}
}
上一篇: crontab 定了时但是不执行的问题
下一篇: NPM 使用介绍