博客
关于我
谷粒商城项目实战——03商品服务之品牌管理
阅读量:305 次
发布时间:2019-03-03

本文共 4924 字,大约阅读时间需要 16 分钟。

品牌管理

前期工作

可以直接将代码生成器中生成的前端代码拷贝到前端页面,从而实现简单的功能,只需根据业务需求做相应的修改即可。

步骤
  • 使用代码生成器生成相关代码,注意代码生成器所配置的数据库。
  • 将代码生成器中生成的brand.vuebrand-and-or-update.vue两个页面拷贝到项目中。
  • 测试

    由于生成的代码中有权限功能,只有有权限的时候才会生成显示添加和删除等按钮,所以我们现将权限获取全部设置为true,后期再来验证权限。

    页面优化
    1. 快速显示开关

    显示状态栏是通过0,1来展示是否显示,我们需要通过按钮来显示。

    2. 文件上传(OSS)

    采用阿里云的OSS来存储文件,方式:用户向应用服务器请求上传policy,应用服务器返回上传policy,用户直接上传数据到OSS,而不是采用用户将图片传给应用服务器,然后再由应用服务器上传到OSS,因为会增加应用服务器负担。

    第三方工具模块

    创建一个第三方工具模块gulimall-third-party

    Maven依赖
    com.hjf.gulimall
    gulimall-common
    0.0.1-SNAPSHOT
    com.baomidou
    mybatis-plus-boot-starter
    org.springframework.boot
    spring-boot-starter-web
    org.springframework.cloud
    spring-cloud-starter-openfeign
    org.springframework.boot
    spring-boot-starter-test
    test
    com.alibaba.cloud
    spring-cloud-starter-alicloud-oss
    配置信息
    spring.application.name=gulimall-third-partyspring.cloud.nacos.config.server-addr=127.0.0.1:8848spring.cloud.nacos.config.namespace=4c9b6122-5d5d-4700-ade2-eaaf5dae222dspring.cloud.nacos.config.ext-config[0].data-id=oss.ymlspring.cloud.nacos.config.ext-config[0].group=devspring.cloud.nacos.config.ext-config[0].refresh=true
    Controller代码
    @RestController
    public class OssController {
    @Autowired
    private OSS ossClient;
    @Value("${spring.cloud.alicloud.access-key}")
    private String accessId;
    @Value("${spring.cloud.alicloud.oss.endpoint}")
    private String endpoint;
    @Value("${spring.cloud.alicloud.oss.bucket}")
    private String bucket;
    @RequestMapping("/oss/policy")
    public Map
    policy(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String host = "https://" + bucket + "." + endpoint;
    PolicyConditions policyConds = new PolicyConditions();
    policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
    policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
    String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
    byte[] binaryData = postPolicy.getBytes("utf-8");
    String encodedPolicy = BinaryUtil.toBase64String(binaryData);
    String postSignature = ossClient.calculatePostSignature(postPolicy);
    respMap = new LinkedHashMap();
    respMap.put("accessid", accessId);
    respMap.put("policy", encodedPolicy);
    respMap.put("signature", postSignature);
    respMap.put("dir", dir);
    respMap.put("host", host);
    respMap.put("expire", String.valueOf(expireEndTime / 1000));
    return respMap;
    }
    }
    Gateway模块

    配置网关路由

    spring:
    cloud:
    gateway:
    routes:
    - id: third_party_route
    uri: lb://gulimall-third-party
    predicates:
    - Path=/api/thirdparty/**
    filters:
    - RewritePath=/api/thirdparty/(?
    .*),/$\{segment}

    前后端联调

    组件导入

    将文件夹中的upload目录拷贝到src/components中。

    跨域问题

    此时上传文件时会出现跨域问题,因为我们是通过客户端直接上传的。

    解决方案

    在阿里云oss中修改权限管理,允许oss可以跨域访问。

    表单校验

    前端校验

    主要校验首字母和排序两个字段。

    后端校验

    采用JSR303校验,实体中添加注解,并定义自己的message提示。

    分组校验

    创建分组接口,修改实体类,给校验注解标注什么情况下才需要验证。

    自定义校验

    编写自定义的校验注解,编写自定义的校验器,关联自定义的校验器和自定义的校验注解。

    异常处理

    为每个方法编写异常处理方法,太过麻烦,同时会使controller层逻辑复杂,所以我们使用统一异常处理。

    创建异常处理类,集中处理各种异常。

    创建错误码枚举类。

    public enum BizCodeEnume {
    UNKNOW_EXCEPTION(10000, "系统未知异常"),
    VALID_EXCEPTION(10001, "参数格式化失败");
    private int code;
    private String msg;
    BizCodeEnume(int code, String msg) {
    this.code = code;
    this.msg = msg;
    }
    public int getCode() {
    return code;
    }
    public String getMsg() {
    return msg;
    }
    }

    创建异常处理类,集中处理各种异常。

    @Slf4j
    @RestControllerAdvice(basePackages = "com.hjf.gulimall.product.controller")
    public class GulimallExceptionControllerAdvice {
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public R handleValidException(MethodArgumentNotValidException e) {
    log.error("数据校验出现问题 {}, 异常类型: {}", e.getMessage(), e.getClass());
    BindingResult bindingResult = e.getBindingResult();
    Map
    errorMap = new HashMap<>();
    bindingResult.getFieldErrors().forEach((item) -> {
    errorMap.put(item.getField(), item.getDefaultMessage());
    });
    return R.error(BizCodeEnume.VAILD_EXCEPTION.getCode(), BizCodeEnume.VAILD_EXCEPTION.getMsg()).put("data", errorMap);
    }
    @ExceptionHandler(value = Throwable.class)
    public R handleException(Throwable throwable) {
    return R.error(BizCodeEnume.UNKNOW_EXCEPTION.getCode(), BizCodeEnume.UNKNOW_EXCEPTION.getMsg());
    }
    }

    转载地址:http://mtum.baihongyu.com/

    你可能感兴趣的文章
    npm和yarn的使用对比
    查看>>
    npm如何清空缓存并重新打包?
    查看>>
    npm学习(十一)之package-lock.json
    查看>>
    npm安装 出现 npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! 解决方法
    查看>>
    npm安装crypto-js 如何安装crypto-js, python爬虫安装加解密插件 找不到模块crypto-js python报错解决丢失crypto-js模块
    查看>>
    npm安装教程
    查看>>
    npm报错Cannot find module ‘webpack‘ Require stack
    查看>>
    npm报错Failed at the node-sass@4.14.1 postinstall script
    查看>>
    npm报错File to import not found or unreadable: @/assets/styles/global.scss.
    查看>>
    npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
    查看>>
    npm版本过高问题
    查看>>
    npm的“--force“和“--legacy-peer-deps“参数
    查看>>
    npm的安装和更新---npm工作笔记002
    查看>>
    npm的常用配置项---npm工作笔记004
    查看>>
    npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
    查看>>
    npm编译报错You may need an additional loader to handle the result of these loaders
    查看>>
    npm设置淘宝镜像、升级等
    查看>>
    npm设置源地址,npm官方地址
    查看>>
    npm配置安装最新淘宝镜像,旧镜像会errror
    查看>>
    NPM酷库052:sax,按流解析XML
    查看>>