统一返回实体RespBean.java
package com.swust.seckill.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Date Created in 2021/8/11 13:39
* @Description 公共返回对象
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RespBean {
private long code;
private String message;
private Object obj;
public static RespBean success(){
return new RespBean(RespBeanEnum.SUCCESS.getCode(),
RespBeanEnum.SUCCESS.getMessage(),null);
}
public static RespBean success(Object obj){
return new RespBean(RespBeanEnum.SUCCESS.getCode(),
RespBeanEnum.SUCCESS.getMessage(),obj);
}
public static RespBean error(RespBeanEnum respBeanEnum){
return new RespBean(respBeanEnum.getCode(),
respBeanEnum.getMessage(),null);
}
public static RespBean error(RespBeanEnum respBeanEnum,Object obj){
return new RespBean(respBeanEnum.getCode(),
respBeanEnum.getMessage(),obj);
}
}
统一返回实体枚举RespBeanEnum.java
package com.swust.seckill.vo;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
/**
* @Date Created in 2021/8/11 13:40
* @Description 公共返回对象枚举
*/
@Getter
@ToString
@AllArgsConstructor
public enum RespBeanEnum {
// 通用
SUCCESS(200,"SUCCESS"),
ERROR(500,"服务端异常"),
// 登录模块
LOGIN_ERROR(500210,"用户名或密码错误"),
MOBILE_ERROR(500211,"手机号码格式错误"),
BIND_ERROR(500212,"参数校验异常"),
// 秒杀模块
EMPTY_STOCK(500500,"库存不足"),
REPEAT_ERROR(500501,"该商品每人限购一件")
;
private final Integer code;
private final String message;
}
全局异常GlobalException.java
package com.swust.seckill.exception;
import com.swust.seckill.vo.RespBeanEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Date Created in 2021/8/12 11:57
* @Description 全局异常
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GlobalException extends RuntimeException{
private RespBeanEnum respBeanEnum;
}
全局异常处理GlobalExceptionHandler.java
package com.swust.seckill.exception;
import com.swust.seckill.vo.RespBean;
import com.swust.seckill.vo.RespBeanEnum;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* @Date Created in 2021/8/12 11:58
* @Description 全局异常处理类
*
* RestControllerAdvice + ExceptionHandler注解 进行异常处理
* 自由度高
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public RespBean exceptionHandler(Exception e){
System.out.println("进行异常处理......");
if (e instanceof GlobalException){
GlobalException ex = (GlobalException) e;
return RespBean.error(ex.getRespBeanEnum());
}else if(e instanceof BindException){
BindException ex = (BindException) e;
RespBean respBean = RespBean.error(RespBeanEnum.BIND_ERROR);
respBean.setMessage("参数校验异常:"+ex.getBindingResult().getAllErrors().get(0).getDefaultMessage());
return respBean;
}
return RespBean.error(RespBeanEnum.ERROR);
}
}