话不多说 直接上干货
1.自定义异常
先写你自定义的异常
/**
* 自定义异常
* @author 86176
*/
public class MyException extends RuntimeException{
private Integer code;
private String message;
public MyException(Enum demo01) {
this.code=demo01.getCode();
this.message = demo01.getMessage();
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
2.创建异常枚举类
这里创建个枚举类 方便调用
/**
* 异常枚举类
* @author 86176
*/
public enum Enum {
//这里写自定义异常
DEMO_01(500,"自定义异常测试");
private final Integer code;
private final String message;
Enum(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}
3.统一返回格式
主要前端接收JSON数据时格式统一
/**
* <p>项目文档: 响应数据封装</p>
*
* @author hexu
* @version V1.0
*/
public class ResponseMessage {
private String errorCode;
private String errorMsg;
private Map<String, Object> objectMap = new HashMap<>();
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
public Map<String, Object> getObjectMap() {
return objectMap;
}
public void setObjectMap(Map<String, Object> objectMap) {
this.objectMap = objectMap;
}
public ResponseMessage addObject(String key, Object value) {
this.objectMap.put(key, value);
return this;
}
public static ResponseMessage success() {
ResponseMessage rm = new ResponseMessage();
rm.setErrorCode("100");
rm.setErrorMsg("处理成功");
return rm;
}
public static ResponseMessage error() {
ResponseMessage rm = new ResponseMessage();
rm.setErrorCode("200");
rm.setErrorMsg("处理失败");
return rm;
}
}
4.统一异常处理
有什么异常就处理什么样的 需要的话自己添加 前端获取JSON数据的时候就可获取异常信息再进行渲染
/**
* 统一异常处理
* @author 86176
*/
@ControllerAdvice
public class MyExceptionHandler {
/**
* 处理自定义异常
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResponseMessage map(MyException e){
return ResponseMessage.error().addObject("code",e.getCode()).addObject("msg",e.getMessage());
}
/**
* 处理断言异常
* @param e
* @return
*/
@ExceptionHandler(value = IllegalArgumentException.class)
@ResponseBody
public ResponseMessage map(IllegalArgumentException e){
return ResponseMessage.error().addObject("msg",e.getMessage());
}
/**
* 效验错误异常处理
* @param e
* @return
*/
@ExceptionHandler(value = MethodArgumentNotValidException.class)
@ResponseBody
public ResponseMessage map(MethodArgumentNotValidException e){
BindingResult bindingResult = e.getBindingResult();
ObjectError objectError = bindingResult.getAllErrors().stream().findFirst().get();
return ResponseMessage.error().addObject("msg",objectError.getDefaultMessage());
}
}