@RestControllerAdvice
public class SysExceptionHandler
{
public static Log logger = LogManager.getLogger(SysExceptionHandler.class);
@ExceptionHandler(Exception.class)
public Result handleException(HttpServletRequest request,
Exception ex)
{
logger.error("Handle Exception Request Url:{},Exception:{}",request.getRequestURL(),ex);
Result result = new Result();
//系统异常
if (ex instanceof SysException)
{
SysException se = (SysException) ex;
BaseResultCode resultCode =se.getErrorCode();
if(resultCode==null)
{
result = Result.error(se.getMessage());
}
else
{
result = new Result(resultCode.getCode(),
StringUtil.isNotEmpty(se.getMessage())?se.getMessage():resultCode.getMsg());
}
}
//参数错误
else if (ex instanceof ConstraintViolationException)
{
ConstraintViolationException v = (ConstraintViolationException) ex;
String message = v.getConstraintViolations().iterator().next()
.getMessage();
result.setCode(ResultCode.PARAMTER_ERROR.getCode());
result.setMsg(ResultCode.PARAMTER_ERROR.getMsg() + ":" + message);
}
//参数错误
else if (ex instanceof BindException)
{
BindException v = (BindException) ex;
String message = v.getAllErrors().stream().map(ObjectError::getDefaultMessage).collect(Collectors.joining(","));
result.setCode(ResultCode.PARAMTER_ERROR.getCode());
result.setMsg(ResultCode.PARAMTER_ERROR.getMsg() + ":" + message);
}
//参数错误
else if (ex instanceof MethodArgumentNotValidException)
{
MethodArgumentNotValidException v = (MethodArgumentNotValidException) ex;
String message = v.getBindingResult().getAllErrors().stream().map(ObjectError::getDefaultMessage).collect(Collectors.joining(","));
result.setCode(ResultCode.PARAMTER_ERROR.getCode());
result.setMsg(ResultCode.PARAMTER_ERROR.getMsg() + ":" + message);
}
else
{
result = new Result(ResultCode.ERROR.getCode(),ExceptionUtil.getErrorMsg(ex));
}
logger.info("exception handle reuslt:" + result);
return result;
}
}
|