日常工作中,后台会根据不同的异常信息,返回给前端不同的提示信息,为了方便项目异常信息统一管理,通常会定义一个异常枚举类。如下:
public enum EnumException {
AUTHOR_FAIL_EXCEPTION("101","用户名或密码错误"),
PARMETER_EXCEPTION("102","请求参数异常"),
SERVICE_TIME_OUT("103","服务超时"),
FILE_TOO_BIG_EXCEPTION("104","上传文件大小超过规定上限");
/** 异常码 */
private String code;
/** 异常信息 */
private String message;
private EnumException(String code,String message){
this.code = code;
this.message = message;
}
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
public void setCode(String code) {
this.code = code;
}
public void setMessage(String message) {
this.message = message;
}
}
自定义一个异常信息类,如下:
public class ServiceException extends RuntimeException{
/** 异常码 */
private String code;
/** 异常信息 */
private String message;
public ServiceException(EnumException enumException){
this.code = enumException.getCode();
this.message = enumException.getMessage();
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
新建异常拦截类:
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(ServiceException.class)
@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
public JsonResult handlerServiceException(ServiceException e){
String code = e.getCode();
String message = e.getMessage();
return new JsonResult(code, message);
}
}
@ControllerAdvice用来拦截异常信息
@ExceptionHandler用来指定拦截哪些异常信息
throw new ServiceException(EnumException.PARMETER_EXCEPTION);
抛出异常信息即可完成异常拦截和日志输出