在开发中经常会用到异常的处理,对于前端的请求会返回json格式的数据,异常也一样,这就需要对异常进行封装。
SpringBoot中提供了ControllerAdvice 和ExceptionHandler 用起来非常的方便
首先定义返回前端的RestFul对象
/**
-
自定义返回到前端对象
*/
public class Result {private int code;
private String message;
private Object object;
public int getCode() {
return code;
}public void setCode(int code) {
this.code = code;
}public String getMessage() {
return message;
}public void setMessage(String message) {
this.message = message;
}public Object getObject() {
return object;
}public void setObject(Object object) {
this.object = object;
}
}
定义一个异常枚举类
/**
-
自定义异常枚举对象
*/
public enum EnumExption {ERROR_EXCEPTION(1001,“长得不够帅”),
ERROR_EXCEPTON_HEIGHT(1002,“个子不够高”);
private Integer code;
private String message;
EnumExption(Integer code,String message){
this.code = code;
this.message = message;
}public Integer getCode() {
return code;
}public void setCode(Integer code) {
this.code = code;
}public String getMessage() {
return message;
}public void setMessage(String message) {
this.message = message;
}
}
定义一个自定义异常的类
**
-
自定义异常
-
需要继承runTimeException
*/
public class JException extends RuntimeException{private int code;
private String message;
public JException(EnumExption e){
this.message = e.getMessage();
this.code = e.getCode();
}
public int getCode() {
return code;
}public void setCode(int code) {
this.code = code;
}@Override
public String getMessage() {
return message;
}public void setMessage(String message) {
this.message = message;
}
}
定义一个统一的异常的处理类 在统一的异常处理类中使用定义好的restFul对象返回异常的信息
/**
- 统一异常处理类
*/
@ControllerAdvice
public class ExceptionHandler {
@org.springframework.web.bind.annotation.ExceptionHandler(value = Exception.class)
@ResponseBody
public Result exception(JException j){
Result result = new Result();
result.setCode(j.getCode());
result.setMessage(j.getMessage());
return result;
}
}
接下来测试
@RestController
public class ExceptionController {
@GetMapping("/textExcetion")
public Result textException(){
Result result = new Result();
if(true){
throw new JException(EnumExption.ERROR_EXCEPTION);
}
return result;
}
}
亲测好用
{“code”:1002,“message”:“个子不够高”,“object”:null}