博客
关于我
谷粒商城项目实战——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/

    你可能感兴趣的文章
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    mysql replace用法
    查看>>
    Mysql Row_Format 参数讲解
    查看>>
    mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
    查看>>
    MySQL Server 5.5安装记录
    查看>>
    mysql server has gone away
    查看>>
    mysql slave 停了_slave 停止。求解决方法
    查看>>
    MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
    查看>>
    MYSQL sql语句针对数据记录时间范围查询的效率对比
    查看>>
    mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
    查看>>
    mysql Timestamp时间隔了8小时
    查看>>
    Mysql tinyint(1)与tinyint(4)的区别
    查看>>
    mysql union orderby 无效
    查看>>
    mysql v$session_Oracle 进程查看v$session
    查看>>
    mysql where中如何判断不为空
    查看>>
    MySQL Workbench 使用手册:从入门到精通
    查看>>
    mysql workbench6.3.5_MySQL Workbench
    查看>>
    MySQL Workbench安装教程以及菜单汉化
    查看>>
    MySQL Xtrabackup 安装、备份、恢复
    查看>>
    mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
    查看>>