当我们后台程序发生错误的时候,前端往往显示一个非常不友好的乱码界面。所以当我们后台发生错误时,需要包装 一个自定义的错误json对象,返回给前端,这样,前端就会根据后台返回的json给用户一个非常友好的提示。
未处理异常时,前端显示效果
处理后前端显示效果
自定义异常在springboot的使用
- 自定义一个异常
package com.itzhongzi.videoedu.exception;
/**
* 自定义异常类
*/
public class ItzhongziException extends RuntimeException {
/**
* 状态码
*/
private Integer code;
/**
* 异常消息
*/
private String msg;
public ItzhongziException(){
super();
}
public ItzhongziException(int code, String msg) {
super(msg);
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
- 增加一个全局异常控制类
package com.itzhongzi.videoedu.exception;
import com.itzhongzi.videoedu.domain.JsonData;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 异常处理控制器
*/
@ControllerAdvice
public class ExceptionHandler {
@org.springframework.web.bind.annotation.ExceptionHandler(value = Exception.class) //捕获哪种类型的异常
@ResponseBody //响应给前端一个json格式
public JsonData Handler(Exception e){
if(e instanceof ItzhongziException) {
//通过这种方式把异常告诉前端
ItzhongziException itzhongziException = (ItzhongziException) e;
return JsonData.buildError(itzhongziException.getMsg(), itzhongziException.getCode());
} else {
return JsonData.buildSuccess("全剧异常,未知错误");
}
}
}
注意: 异常捕获类要用
@ControllerAdvice
来注解,这样springboot程序才可以扫描到。
- 测试
@RequestMapping("test_db")
public Object testDb() {
throw new ItzhongziException(-2, "自定义错误");
// return videoMapper.findAll();
}
- 前端显示结果