新建exception目录,用来进行自定义的全局异常处理。
(1)新建自定义的GlobalException基 类继承RuntimeException类,我们自定义的异常类全部需要继承GlobalException基类进行处理。
这里我们直接利用之前定义的错误码接口类。
/**
* 自定义的全局异常
*/
public class GlobalException extends RuntimeException{
private IErrorCode errorCode;
public GlobalException(String message) {
super(message);
}
public GlobalException(Throwable cause) {
super(cause);
}
public GlobalException(String message, Throwable cause) {
super(message, cause);
}
public IErrorCode getErrorCode() {
return errorCode;
}
}
(2)在exception目录下,新建GlobalExceptionHandler类,拦截异常类。
在此类中可以捕获并将异常类转换为可接受的信息返回给前端,防止将异常直接抛出到前端。
/**
* 捕获并处理全局异常
*/
@ResponseBody
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 捕获并处理所有自定义异常
*/
@ExceptionHandler(value = GlobalException.class)
public HttpResult handle(GlobalException e) {
if (e.getErrorCode() != null) {
return HttpResult.fail(e.getErrorCode());
}
return HttpResult.fail(e.getMessage());
}
/**
* 捕获并处理方法参数未验证异常
*/
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public HttpResult handleValidException(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
String message = null;
if (bindingResult.hasErrors()) {
FieldError fieldError = bindingResult.getFieldError();
if (fieldError != null) {
message = fieldError.getField()+fieldError.getDefaultMessage();
}
}
return HttpResult.validateFailed(message);
}
/**
* 捕获并处理绑定异常
*/
@ExceptionHandler(value = BindException.class)
public HttpResult handleValidException(BindException e) {
BindingResult bindingResult = e.getBindingResult();
String message = null;
if (bindingResult.hasErrors()) {
FieldError fieldError = bindingResult.getFieldError();
if (fieldError != null) {
message = fieldError.getField()+fieldError.getDefaultMessage();
}
}
return HttpResult.validateFailed(message);
}
}