全局异常处理
通过GlobalExceptionHandler实现统一异常处理,controller或者service不需要进行catch之后的包装.
全局返回结果
/**
* 全局返回vo
* 不需要success(boolean)属性,直接使用code判断
* 不需要针对每种异常都申请一个错误码,特殊情况下(如前端需要针对不同错误码做不同页面跳转)需单独申请错误码。
*/
@Data
public class ResultVO<T> {
/** 返回码 */
@JsonProperty(index = 1)
private int code;
/** 消息 */
@JsonProperty(index = 2)
private String message;
/** 具体数据 */
@JsonProperty(index = 3)
T data;
/** 时间戳 */
@JsonProperty(index = 4)
private long timestamp = System.currentTimeMillis();
}
全局异常处理
/**
* 全局异常处理器
*/
@RestControllerAdvice
public class GlobalExceptionHandler
{
/**
* CoreException 异常处理
*
* @param request 请求
* @param e 异常
* @return 返回统一类型
*/
@ExceptionHandler({CoreException.class})
@ResponseStatus(value = org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR)
public ResultVO<String> coreException(HttpServletRequest request, CoreException e) {
log.error(e.getMessage(), e);
// 兼容历史项目,先判断CoreException是否有code
// 也可以通过定义不同的exception处理,但是需要handler中同步增加异常类型处理代码
ResultVO<String> resultVO = new ResultVO<>();
resultVO.setCode(Objects.isNull(e.getCode()) ? ResponseCodeEnum.FAIL.getCode() : e.getCode());
resultVO.setMessage(e.getMessage());
return resultVO;
}
}