• Spring Boot 构建电商基础秒杀项目 (三) 通用的返回对象 & 异常处理


    SpringBoot构建电商基础秒杀项目 学习笔记

    定义通用的返回对象

    public class CommonReturnType {
    
        // success, fail
        private String status;
    
        // status = success, data 内返回前端需要的 json数据
        // status = fail, data 内使用通用的错误码格式
        private Object data;
    
        public static CommonReturnType create(Object result){
    
            return create(result, "success");
        }
    
        public static CommonReturnType create(Object result, String status){
    
            CommonReturnType type = new CommonReturnType();
            type.setStatus(status);
            type.setData(result);
    
            return type;
        }
    
        public String getStatus() {
            return status;
        }
    
        public void setStatus(String status) {
            this.status = status;
        }
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    }
    

    定义错误接口

    public interface CommonError {
    
        public int getErrCode();
        public String getErrMsg();
        public CommonError setErrMsg(String errMsg);
    }
    
    

    定义错误类型枚举

    public enum EmBusinessError implements CommonError {
    
        // 通用错误类型 10001
        PARAMETER_VALIDATION_ERROR(10001, "参数不合法"),
        UNKNOWN_ERROR(10002, "未知错误"),
    
        // 20000 开头为用户信息相关错误定义
        USER_NOT_EXIST(20001, "用户不存在"),
    
        ;
    
        private int errCode;
        private String errMsg;
    
        private EmBusinessError(int errCode, String errMsg){
            this.errCode = errCode;
            this.errMsg = errMsg;
        }
    
        @Override
        public int getErrCode() {
            return this.errCode;
        }
    
        @Override
        public String getErrMsg() {
            return this.errMsg;
        }
    
        @Override
        public CommonError setErrMsg(String errMsg) {
            this.errMsg = errMsg;
            return this;
        }
    }
    

    包装器业务异常类实现

    // 包装器业务异常类实现
    public class BusinessException extends Exception implements CommonError {
    
        private CommonError commonError;
    
        public BusinessException(CommonError commonError){
            super();
            this.commonError = commonError;
        }
    
        public BusinessException(CommonError commonError, String errMsg){
            super();
            this.commonError = commonError;
            this.commonError.setErrMsg(errMsg);
        }
    
        @Override
        public int getErrCode() {
            return this.commonError.getErrCode();
        }
    
        @Override
        public String getErrMsg() {
            return this.commonError.getErrMsg();
        }
    
        @Override
        public CommonError setErrMsg(String errMsg) {
            this.commonError.setErrMsg(errMsg);
            return this;
        }
    }
    

    定义 BaseController 处理异常

    public class BaseController {
    
        // 定义 exceptionhandler 解决未被 controller 层吸收的 exception
        @ExceptionHandler(Exception.class)
        @ResponseStatus(HttpStatus.OK)
        @ResponseBody
        public Object handlerException(HttpServletRequest request, Exception ex){
    
            Map<String, Object> responseData = new HashMap<>();
    
            if(ex instanceof BusinessException){
                BusinessException businessException = (BusinessException)ex;
                responseData.put("errCode", businessException.getErrCode());
                responseData.put("errMsg", businessException.getErrMsg());
            }else{
                responseData.put("errCode", EmBusinessError.UNKNOWN_ERROR.getErrCode());
                responseData.put("errMsg", EmBusinessError.UNKNOWN_ERROR.getErrMsg());
            }
    
            return CommonReturnType.create(responseData, "fail");
        }
    }
    

    修改 UserController

    @Controller("user")
    @RequestMapping("/user")
    public class UserController extends BaseController{
    
        @Autowired
        private UserService userService;
    
        @RequestMapping("/get")
        @ResponseBody
        public CommonReturnType getUser(@RequestParam(name="id") Integer id) throws BusinessException{
            UserModel userModel = userService.getUserById(id);
    
            if(userModel == null){
    //            userModel.setEncrptPassword("123");
                throw new BusinessException(EmBusinessError.USER_NOT_EXIST);
            }
    
            UserVO userVO = convertFromModel(userModel);
    
            return CommonReturnType.create(userVO);
        }
    
        private UserVO convertFromModel(UserModel userModel){
            if(userModel == null){
                return null;
            }
    
            UserVO userVO = new UserVO();
            BeanUtils.copyProperties(userModel, userVO);
    
            return userVO;
        }
    }
    

    源码:spring-boot-seckill

  • 相关阅读:
    BZOJ 3041 水叮当的舞步
    Codevs 1744 格子染色==BZOJ 1296 粉刷匠
    洛谷P1077 摆花
    1256 打鼹鼠
    mybatis--面向接口编程
    柳峰微信公众平台开发教程企业号改动篇(企业菜单篇)
    com关于引用计数
    oracle用户管理实例
    用 JSQMessagesViewController 创建一个 iOS 聊天 App
    循环链表设计与API实现
  • 原文地址:https://www.cnblogs.com/victorbu/p/10545405.html
Copyright © 2020-2023  润新知