spring,springmvc版本:4.0.6.RELEASE
lombok版本:1.18.8
1.配置包扫描,扫描到全局异常处理类
springboot放在启动类同级的包,会自动扫描并装配。非springboot项目,需要在spring配置文件里配置包扫描。贴一下代码,具体操作步骤省略。
<context:component-scan base-package="com.hj.handler"/>
2.全局异常处理
我这里直接贴代码了,异常处理的方式比较简单,就是打印到日志文件里,但是获取到参数和接口名称了,可以做的事情就很多了,可以根据自己的需求来自定义。
代码里的 log 对象,来自lombok注解。
json工具类来自 Hutools库,这里强烈推荐一下这个工具包。
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
* 全局异常捕获
*/
@Slf4j
@ControllerAdvice
public class ExceptionHandle {
@ExceptionHandler(value = Exception.class)
public void handle(HttpServletRequest request, Exception e) {
log.error(request.getRequestURL().toString() + " 接口出现异常,异常信息:");
log.error("请求参数:" + getRequestParams(request));
log.error("异常信息:", e);
}
/**
* 从 request 对象中获取请求参数,并将请求转成json格式,可以根据需求自定义参数打印格式
*
* @param request
* @return
*/
public String getRequestParams(HttpServletRequest request) {
if (null != request && null != request.getParameterMap()) {
Map<String, Object> map = new HashMap<>();
final Map<String, String[]> parameterMap = request.getParameterMap();
for (String s : parameterMap.keySet()) {
map.put(s, parameterMap.get(s));
}
return JSONUtil.toJsonStr(map);
}
return null;
}
}