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

本文共 4854 字,大约阅读时间需要 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代码
    @RestControllerpublic 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/

    你可能感兴趣的文章
    mysqldump实现数据备份及灾难恢复
    查看>>
    mysqldump数据库备份无法进行操作只能查询 --single-transaction
    查看>>
    mysqldump的一些用法
    查看>>
    mysqli
    查看>>
    MySQLIntegrityConstraintViolationException异常处理
    查看>>
    mysqlreport分析工具详解
    查看>>
    MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
    查看>>
    Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
    查看>>
    mysql_real_connect 参数注意
    查看>>
    mysql_secure_installation初始化数据库报Access denied
    查看>>
    MySQL_西安11月销售昨日未上架的产品_20161212
    查看>>
    Mysql——深入浅出InnoDB底层原理
    查看>>
    MySQL“被动”性能优化汇总
    查看>>
    MySQL、HBase 和 Elasticsearch:特点与区别详解
    查看>>
    MySQL、Redis高频面试题汇总
    查看>>
    MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
    查看>>
    mysql一个字段为空时使用另一个字段排序
    查看>>
    MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
    查看>>
    MYSQL一直显示正在启动
    查看>>
    MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>