前提:返回给前端 JSON字符串需要jackson包或其他支持的包(GSON等)。
- 定义一个枚举类 包含 返回前端的参数,以及枚举类的实例(根据所需要的异常状态自定义)
public enum MyStatus {
//
OK(200,"成功") ,
ERROR(400,"失败");
private int status;
private String message;
MyStatus(int status, String message) {
this.status = status;
this.message = message;
}
MyStatus(){}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
定义一个ExceptionMessage类(用于Controller层处理异常状态信息),有参构造传入枚举类供Controller层调用
public class ExceptionMessage {
private int status;
private String name;
public ExceptionMessage(MyStatus myStatus) {
this.status = myStatus.getStatus();
this.name = myStatus.getMessage();
}
public ExceptionMessage() {
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
自定义MyException类 继承 RuntimeException 异常类 作用:供Controller层 aop切面处理异常
public class MyException extends RuntimeException {
private MyStatus myStatus;
public MyException(MyStatus myStatus) {
this.myStatus = myStatus;
}
public MyStatus getMyStatus() {
return myStatus;
}
public void setMyStatus(MyStatus myStatus) {
this.myStatus = myStatus;
}
}
- 控制层处理前端传来的异常信息: 这里以传进type类型为例
将抛出的异常给aop处理,并以字符串的形式返回给前端@Controller public class ExceptionController { @GetMapping("exception") @ResponseBody public ExceptionMessage exceptionMessage(int type) { if(type==1){ // return new ExceptionMessage(MyStatus.OK);直接返回错误,没抛出异常 throw new MyException(MyStatus.OK);//抛出异常 }else { throw new MyException(MyStatus.ERROR);//抛出异常 } } }
-
@RestControllerAdvice public class JsonExceptionHandler { //要处理的异常类.class @ExceptionHandler(MyException.class) public ExceptionMessage myExceptionHandler(MyException e){ return new ExceptionMessage(e.getMyStatus()); } }