一,介绍
在实际业务中,springboot的异常处理可能无法满足我们的业务需求,那么就需要我们自定义异常来处理。
可以用来跳转到统一错误提示页面或者返回错误信息。
二,实现过程和示例代码
- 定义一个自定义异常类
package com.eceibs.report.exception;
/**
* 自定义异常
*/
public class RRException extends RuntimeException {
private static final long serialVersionUID = 1L;
private String msg;
private int code = 500;
public RRException(String msg) {
super(msg);
this.msg = msg;
}
public RRException(String msg, Throwable e) {
super(msg, e);
this.msg = msg;
}
public RRException(String msg, int code) {
super(msg);
this.msg = msg;
this.code = code;
}
public RRException(String msg, int code, Throwable e) {
super(msg, e);
this.msg = msg;
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
- 需要的地方进行抛出
if(size>1000){
throw new RRException("参数异常!",10111);
}
- 定义一个全局异常捕捉类
@ExceptionHandler 标注需要处理捕捉的异常类型
@ResponseBody 异常处理返回
package com.eceibs.report.exception;
import com.alibaba.fastjson.JSONException;
import com.eceibs.report.constant.ErrorConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.HashMap;
import java.util.Map;
/**
* ClassName: UnionExceptionHandler
*/
@Slf4j
@RestControllerAdvice
public class UnionExceptionHandler {
/**
* 应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器
* log如果为红色的话需要IDE安装lombok插件
* Description : 全局异常捕捉处理
* Group :
* @param
* @return
*/
@ResponseBody
@ExceptionHandler(RRException.class)
public Map apiExceptionHandler(RRException ex) {
log.error("ApiException 异常抛出:{我是异常我错了...}", ex);
Map map = new HashMap();
map.put("code", ex.getCode());
map.put("msg", ex.getMessage());
return map;
}
@ResponseBody
@ExceptionHandler(JSONException.class)
public Map JSONExceptionHandler() {
Map map = new HashMap();
map.put("code", ErrorConstants.JSON);
map.put("msg", ErrorConstants.JSON_DESC);
return map;
}
@ResponseBody
@ExceptionHandler(NullPointerException.class)
public Map NullPointerExceptionHandler() {
Map map = new HashMap();
map.put("code", ErrorConstants.PARAMS_NULL);
map.put("msg", ErrorConstants.PARAMS_NULL_DESC);
return map;
}
@ResponseBody
@ExceptionHandler(NumberFormatException.class)
public Map NumberFormatExceptionHandler() {
Map map = new HashMap();
map.put("code", ErrorConstants.PARAMS);
map.put("msg", ErrorConstants.PARAMS_DESC);
return map;
}
}
这样就可以实现自定义异常的产生和捕捉