一 设置全局统一的返回格式
1.1 没有加全局异常处理
1.这里设置一个字符串为空指针异常,然后看看返回给前端的信息。
2.返回结果
3.效果看起来不友好的提示
1.2 添加全局异常处理
1.代码:添加一个全局异常处理类
@ControllerAdvice
public class GlobalExceptionHandler {
//指定出现什么异常执行这个方法
@ExceptionHandler(Exception.class)
@ResponseBody //为了返回数据
public R error(Exception e) {
e.printStackTrace();
return R.error().message("亲,发生错了!!!..");
}
}
3.返回的json格式
package com.ljf.spring.boot.demo.common;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @ClassName: R
* @Description: TODO
* @Author: liujianfu
* @Date: 2022/12/03 15:53:28
* @Version: V1.0
**/
public class R {
private Boolean success;
private Integer code;
private String message;
private Map<String, Object> data = new LinkedHashMap<String, Object>();
//把构造方法私有
private R() {}
//成功静态方法
public static R ok() {
R r = new R();
r.setSuccess(true);
r.setCode(ResultCode.SUCCESS);
r.setMessage("成功");
return r;
}
//失败静态方法
public static R error() {
R r = new R();
r.setSuccess(false);
r.setCode(ResultCode.ERROR);
r.setMessage("失败");
return r;
}
public R success(Boolean success){
this.setSuccess(success);
return this;
}
public R message(String message){
this.setMessage(message);
return this;
}
public R code(Integer code){
this.setCode(code);
return this;
}
public R data(String key, Object value){
this.data.put(key, value);
return this;
}
public R data(Map<String, Object> map){
this.setData(map);
return this;
}
public Boolean getSuccess() {
return success;
}
public void setSuccess(Boolean success) {
this.success = success;
}
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;
}
public Map<String, Object> getData() {
return data;
}
public void setData(Map<String, Object> data) {
this.data = data;
}
}
4.返回结果
二 设置指定异常的返回格式
2.1 在全局类设定处理特定异常
这种情况说白了不怎么常用,因为你并不清楚代码存在要报什么异常。
1.代码
//特定异常
@ExceptionHandler(ArithmeticException.class)
@ResponseBody //为了返回数据
public R error(ArithmeticException e) {
e.printStackTrace();
return R.error().message("执行了ArithmeticException异常处理..");
}
2.如图
3.返回格式
三 自定义返回异常的json格式
3.1 自定义异常处理类
1.自定义一个异常处理类
2.注册异常类
//自定义异常
@ExceptionHandler(ZidingyiException.class)
@ResponseBody //为了返回数据
public R error(ZidingyiException e) {
e.printStackTrace();
return R.error().code(e.getCode()).message(e.getMsg());
}
3.捕捉和调用
4.查看结果