此文章记录了spring mvc中统一处理异常的一种方式,那就是使用@ControllerAdvice和@ExceptionHandler注解搭配,废话不多说,作为一个程序员就应该直接上代码:
第一步,编写异常管理类ExceptionManage,注意MyTextException这个异常是我自定义的异常
/**
* 异常处理类
*
* @author Linhai.Tan 2017-12-22
*
*/
@ControllerAdvice
public class ExceptionManage {
/**
* 自定义文本异常
*
* @param ex
* @return
*/
@ExceptionHandler({ MyTextException.class })
public ResponseEntity<RequestResult> myTextException(MyTextException ex) {
return ResultUtils.requestError(ex.getMessage(),ex.getData());
}
/**
* 请求参数异常
*
* @param ex
* @return
*/
@ExceptionHandler({ MissingServletRequestParameterException.class })
public ResponseEntity<RequestResult> missingServletRequestParameterException(
MissingServletRequestParameterException ex) {
String parameterName = ex.getParameterName();
return ResultUtils.requestError("缺少参数:" + parameterName);
}
/**
* 请求方法异常
*
* @param ex
* @return
*/
@ExceptionHandler({ HttpRequestMethodNotSupportedException.class })
public ResponseEntity<RequestResult> httpRequestMethodNotSupportedException(
HttpRequestMethodNotSupportedException ex) {
String parameterName = ex.getMethod();
return ResultUtils.requestError("不能使用" + parameterName + "方式访问此接口!");
}
/**
* 未登入异常
*
* @param ex
* @return
*/
@ExceptionHandler({ NotLoginException.class })
public ResponseEntity<RequestResult> notLoginException(NotLoginException ex) {
String msg = ex.getMsg();
if (StringUtils.isBlank(msg)) {
msg = "您还未登入!";
}
return ResultUtils.requestError(HttpStatus.UNAUTHORIZED, msg, ex.getData());
}
/**
* jwt解析异常
*
* @param ex
* @return
*/
@ExceptionHandler({ MalformedJwtException.class })
public ResponseEntity<RequestResult> malformedJwtException(MalformedJwtException ex) {
return ResultUtils.requestError("token解析出错!", ex.getMessage());
}
/**
* 拦截其他异常
*
* @return
*/
@ExceptionHandler({ Exception.class })
public ResponseEntity<RequestResult> exception(Exception ex) {
ex.printStackTrace();
return ResultUtils.requestError("未知异常!",ex.getMessage());
}
}
第二步,我告诉你们可以了你信吗
第三步,只要我们在代码中抛出对应的异常,既可以进入对应的方法进行处理
throw new MyTextException("请填写用户名称!");