统一返回UI格式类型
1 public class CommonReturnType {
2 //返回给UI的数据
3 private Object data;
4 //返回给UI的状态
5 private String status;
6
7 public static CommonReturnType create(Object result){
8 //默认返回状态为success
9 return CommonReturnType.create(result,"success");
10 }
11 public static CommonReturnType create(Object result,String status){
12 CommonReturnType type = new CommonReturnType();
13 type.setData(result);
14 type.setStatus(status);
15 return type;
16 }
17
18 public Object getData() {
19 return data;
20 }
21
22 public void setData(Object data) {
23 this.data = data;
24 }
25
26 public String getStatus() {
27 return status;
28 }
29
30 public void setStatus(String status) {
31 this.status = status;
32 }
33 }
自定义异常格式
1 public interface CommonError {
2 public int getErrCode();
3 public String getErrMsg();
4 public CommonError setErrMsg(String errMsg);
5 }
1 public enum EmBusinessError implements CommonError{
2 //10000开头为通用错误类型
3 PARAMETER_VALIDATION_ERROR(10001,"参数不合法"),
4
5 //未知错误
6 UNKNOW_ERROR(10002,"未知错误"),
7
8 //20000开头为用户信息相关错误
9 USER_NOT_EXIST(20001,"用户不存在"),
10 User_LOGIN_ERROR(20002,"手机号或密码错误"),
11 User_NOT_LOGIN(20003,"用户未登陆"),
12
13 //30000开头为交易信息异常
14 STOCK_NOT_ENOUGH(30001,"库存不足")
15 ;
16 private int errCode;
17 private String errMsg;
18
19 EmBusinessError(int errCode, String errMsg) {
20 this.errCode = errCode;
21 this.errMsg = errMsg;
22 }
23
24 @Override
25 public int getErrCode() {
26 return this.errCode;
27 }
28
29 @Override
30 public String getErrMsg() {
31 return this.errMsg;
32 }
33
34 @Override
35 public CommonError setErrMsg(String errMsg) {
36 this.errMsg = errMsg;
37 return this;
38 }
39 }
1 public class BusinessException extends Exception implements CommonError {
2 private CommonError commonError;
3
4 //直接接收EmBussinessError的传参用于构造业务异常
5 public BusinessException(CommonError commonError){
6 super();
7 this.commonError=commonError;
8 }
9
10 //接受自定义errMsg方式构造业务异常
11 public BusinessException(CommonError commonError,String errMsg){
12 super();
13 this.commonError=commonError;
14 this.commonError.setErrMsg(errMsg);
15 }
16
17 @Override
18 public int getErrCode() {
19 return this.commonError.getErrCode();
20 }
21
22 @Override
23 public String getErrMsg() {
24 return this.commonError.getErrMsg();
25 }
26
27 @Override
28 public CommonError setErrMsg(String errMsg) {
29 return this.commonError.setErrMsg(errMsg);
30 }
31 }
全局异常处理器
1 import com.wu.error.BusinessException;
2 import com.wu.error.EmBusinessError;
3 import com.wu.response.CommonReturnType;
4 import org.springframework.web.bind.ServletRequestBindingException;
5 import org.springframework.web.bind.annotation.ControllerAdvice;
6 import org.springframework.web.bind.annotation.ExceptionHandler;
7 import org.springframework.web.bind.annotation.ResponseBody;
8 import org.springframework.web.servlet.NoHandlerFoundException;
9
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 import java.util.HashMap;
13 import java.util.Map;
14
15 @ControllerAdvice
16 public class GlobalExceptionHandler{
17 @ExceptionHandler(Exception.class)
18 @ResponseBody
19 public CommonReturnType doError(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Exception ex) {
20 ex.printStackTrace();
21 Map<String,Object> responseData = new HashMap<>();
22 if( ex instanceof BusinessException){
23 BusinessException businessException = (BusinessException)ex;
24 responseData.put("errCode",businessException.getErrCode());
25 responseData.put("errMsg",businessException.getErrMsg());
26 }else if(ex instanceof ServletRequestBindingException){
27 responseData.put("errCode", EmBusinessError.UNKNOW_ERROR.getErrCode());
28 responseData.put("errMsg","url绑定路由问题");
29 }else{
30 responseData.put("errCode", EmBusinessError.UNKNOW_ERROR.getErrCode());
31 responseData.put("errMsg",EmBusinessError.UNKNOW_ERROR.getErrMsg());
32 }
33 return CommonReturnType.create(responseData,"fail");
34 }
35 }