尚硅谷《谷粒商城项目总结》

1、前言

花了几天的时间把尚硅谷的视频项目看完了,跟着做了一遍,基本上没啥大的问题,有几个小问题也做了总结。

技术方面除了 vue/nacos 没用过,其他的基本都用过,我们公司实际开发中用的也就是这一套东西。

中间的不想看,可以直接点击目录,看总结,总结里有你针对此项目所有的总结及问题解决的说明

1.1 技术栈

springcloud

统一配置中心:apollo 视频里用的 nacos

统一注册中心:eureka  视频里用的 nacos

远程调用:feign

文件上传:OSS(oss 中有文件过期的设置,我们项目就因为这个出了问题。加了过期时间戳,然后到时间过期了,淡疼)

vue,前端搞,我们只搞后端。

1.2 统一异常处理

1)、异常根据业务分类,然后不同的业务异常编码做到统一的规范.对后期也是很好的,方便维护、管理。

2)、enum 维护,2 个字段 code msg,可以和 R 对象一起使用,异常时返回给前端显示

3)、throw 异常,

xxxException 自己实现的统一异常,构造参数传上 xxxErrorCode(接口),然后所有的错误 Enum 实现这个接口,执行下面的代码就可以了。

throw new XXXException(XXXEnum.NOT_USER_ERROR);

然后抛出异常后,这个类(@RestControllerAdvice)就会去统一处理,返回给前台相应的信息.

我们的大概用法如下,只是一个大概思路。

/**
 * @author : bamboo
 * @date : 2020-04-11
 */
public interface MallErrorCode {

    /**
     * 获取错误码
     *
     * @return 错误码
     */
    String geCode();

    /**
     * 获取错误消息
     *
     * @return 错误消息
     */
    String getMsg();

}


/**
 * @author : bamboo
 * @date : 2020-04-11
 */
public enum UserErrorEnum implements MallErrorCode {

    /**
     *
     */
    USER_NOT_FOUND("20001", "没有找到此用户"),

    USER_DELETED("200002", "用户已被删除");

    private final String code;

    private final String msg;

    UserErrorEnum(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    @Override
    public String geCode() {
        return this.code;
    }

    @Override
    public String getMsg() {
        return this.msg;
    }
}


/**
 * @author : bamboo
 * @date : 2020-04-11
 */
public class MallException extends RuntimeException {

    private String code = "500";

    private String msg;

    public MallException(String code, String msg) {
        super(msg);
        this.code = code;
    }

    public MallException(MallErrorCode mallErrorCode) {
        this(mallErrorCode.geCode(), mallErrorCode.getMsg());
    }

    public static void createFailResult(MallErrorCode mallErrorCode) {
        throw new MallException(mallErrorCode);
    }

    public static void createFailResult(String code, String msg) {
        throw new MallException(code, msg);
    }

    public static void main(String[] args) {
        throw new MallException(UserErrorEnum.USER_DELETED);
    }
}

1.3 返回信息统一封装

R 对象.这里是继承了 HashMap 对象

我们是直接用了 Bean 对象,封装了如下的信息.

{

  "success" : true/false,// 标识接口成功与否

  "code" : 100,//响应编码

  "msg" : "",//响应消息,错误的时候会用到

  "data" : {

  }//返回的数据

}

2、总结

针对此项目也做了一些总结,过程中也遇到了一些小问题,不过都还好,能很快的定位。如果有想看的同学可以参考如下链接:

https://gitee.com/yeyinzhu/gulimall-learn/tree/master

原文地址:https://www.cnblogs.com/zhuzi91/p/12681980.html