文章目录
SpringBoot配置全局try catch处理
参考博客链接
1、先上效果
1.1、Controller层
1.2、发请求的效果
对应controller层的第一个接口
对应controller层的第二个接口
对应controller层的第三个接口
2、废话不多说,直接上步骤
2.1、项目结构
2.2、相关代码
2.2.1 BusinessException.java
这个是自己定义的异常处理,这里面的属性主要根据你自己返回的数据需要而定义的,我这里只需要一个message,所以这个自定义的异常类,只有一个errorMessage属性
public class BusinessException extends RuntimeException {
private static final long serialVersionUID = -4879677283847539655L;
private String errorMessage;
public BusinessException(String errorMessage) {
super();
this.errorMessage = errorMessage;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
}
2.2.2、GlobalExceptionHandle.java
这里是重点:这里是存放各种错误所返回的数据
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 处理自定义的业务异常,自己传一个错误信息进来
* @param req
* @param e
* @return
*/
@ExceptionHandler(value = BusinessException.class)
@ResponseBody
public Result bizExceptionHandler(HttpServletRequest req, BusinessException e){
System.err.println("未知异常!原因是:"+e.getErrorMessage());
return new ReturnUtil<>().getFail(e.getErrorMessage());
}
/**
* 处理空指针的异常
* @param req
* @param e
* @return
*/
@ExceptionHandler(value = NullPointerException.class)
@ResponseBody
public Result exceptionHandler(HttpServletRequest req, NullPointerException e){
System.err.println("未知异常!原因是:"+e);
return new ReturnUtil<>().getFail("数据格式不正确,造成空指针错误");
}
/**
* 处理其他异常,服务器内部错误
* @param req
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Result exceptionHandler(HttpServletRequest req, Exception e){
System.err.println("未知异常!原因是:"+e);
return new ReturnUtil<>().getFail("未知错误,请联系管理员");
}
}
2.2.3、ConstValue.java
这里主要用于存放自定义的常量
public class ConstValue {
/** 请求成功的返回码 */
public final static Integer SUCCESS_CODE = 200;
/** 请求失败的返回码 */
public final static Integer FAIL_CODE = 201;
/** 获取成功信息 */
public final static String SUCCESS_MSG = "获取成功";
/** 获取失败信息 */
public final static String FAIL_MSG = "获取失败";
}
2.2.4、Result.java,自定义结果返回类
这个是我自己定义的结果返回类型,我主要是有一个
code,用于存放返回码,我自己设置的是为200表示成功,为201表示失败,
data,用于存放返回给前端的数据,
msg,用于存放一个附带的信息字符串
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> implements Serializable {
int code;
T data;
String msg;
private static final long serialVersionUID = 1L;
}
2.2.5、ReturnUtil.java,自定义结果返回类
这个是方便返回的时候使用的结果工具类
public class ReturnUtil<T> {
/**
* 获取数据成功,同时返回自己传的data和msg
* @param data 数据
* @param msg 提示信息
* @return 结果
*/
public Result<T> getOk(T data, String msg){
return new Result<>(ConstValue.SUCCESS_CODE, data, msg);
}
/**
* 获取数据成功,只传data,msg都是成功
* @param data 数据
* @return 结果
*/
public Result<T> getOk(T data){
return new Result<>(ConstValue.SUCCESS_CODE, data, ConstValue.SUCCESS_MSG);
}
/**
* 获取数据失败,同时返回自己传的msg
* @param msg 提示信息
* @return 结果
*/
public Result<T> getFail(String msg){
return new Result<>(ConstValue.FAIL_CODE, null, msg);
}
/**
* 获取数据失败
* @return 结果
*/
public Result<T> getFail(){
return new Result<>(ConstValue.FAIL_CODE, null, ConstValue.FAIL_MSG);
}
}
如果觉得有用,各位观众老爷点个赞再走哈~谢谢(其实再加个关注也不介意哈哈哈)