package org.jeecg.modules.dnc.exception;
|
|
import com.google.common.collect.ImmutableMap;
|
import org.jeecg.modules.dnc.response.AuthCode;
|
import org.jeecg.modules.dnc.response.CommonCode;
|
import org.jeecg.modules.dnc.response.ResponseResult;
|
import org.jeecg.modules.dnc.response.ResultCode;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.http.converter.HttpMessageNotReadableException;
|
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.client.HttpClientErrorException;
|
|
import java.nio.file.AccessDeniedException;
|
|
/**
|
* 统一异常捕获类
|
* @author Administrator
|
* @version 1.0
|
* @create 2018-09-14 17:32
|
**/
|
@ControllerAdvice//控制器增强
|
public class ExceptionCatch {
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionCatch.class);
|
|
//定义map,配置异常类型所对应的错误代码
|
private static ImmutableMap<Class<? extends Throwable>,ResultCode> EXCEPTIONS;
|
//定义map的builder对象,去构建ImmutableMap
|
protected static ImmutableMap.Builder<Class<? extends Throwable>,ResultCode> builder = ImmutableMap.builder();
|
|
//捕获CustomException此类异常
|
@ExceptionHandler(CustomException.class)
|
@ResponseBody
|
public ResponseResult customException(CustomException customException){
|
//记录日志
|
LOGGER.error("catch exception:{}",customException.getMessage());
|
ResultCode resultCode = customException.getResultCode();
|
return new ResponseResult(resultCode);
|
}
|
//捕获Exception此类异常
|
@ExceptionHandler(Exception.class)
|
@ResponseBody
|
public ResponseResult exception(Exception exception){
|
//记录日志
|
LOGGER.error("catch exception:{}",exception.getMessage());
|
//exception.printStackTrace();
|
if(EXCEPTIONS == null){
|
EXCEPTIONS = builder.build();//EXCEPTIONS构建成功
|
}
|
//从EXCEPTIONS中找异常类型所对应的错误代码,如果找到了将错误代码响应给用户,如果找不到给用户响应99999异常
|
ResultCode resultCode = EXCEPTIONS.get(exception.getClass());
|
if(resultCode !=null){
|
return new ResponseResult(resultCode);
|
}else{
|
if(exception.getMessage().startsWith("401")) {
|
return new ResponseResult(AuthCode.AUTH_CREDENTIAL_ERROR);
|
}else if(exception.getMessage().startsWith("400")) {
|
return new ResponseResult(AuthCode.AUTH_CREDENTIAL_ERROR);
|
}
|
//返回99999异常
|
return new ResponseResult(CommonCode.SERVER_ERROR);
|
}
|
|
|
}
|
|
static {
|
//定义异常类型所对应的错误代码
|
builder.put(HttpMessageNotReadableException.class,CommonCode.INVALID_PARAM);
|
builder.put(AccessDeniedException.class, CommonCode.UNAUTHORISE);
|
builder.put(HttpClientErrorException.BadRequest.class, AuthCode.AUTH_CREDENTIAL_ERROR);
|
|
}
|
}
|