栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot电商项目47:购物车模块五:【更新购物车某个商品的数量】接口;

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot电商项目47:购物车模块五:【更新购物车某个商品的数量】接口;

说明:

(1)本篇博客的主要内容是,开发【更新购物车某个商品的数量】接口;

(2)本篇博客出于安全考虑:而采用的一种广泛采用的做法:

             ● 接口不能传入用户id,而是要在程序内部获取;否则,如果接口参数中有用户id的话,这很可能会被黑客利用,黑客就可以通过这个接口随意修改任何人的购物车中的商品了;(PS:这也能有效防止横向越权)

             ● 接口不能传入cartId,而是要去数据库中查;否则,黑客可能会胡乱更新购物车中的数据,导致更新其他人的购物车数据;

             ● 其实,由此,也能感受到【接口的设计能力】,这个能力也是需要慢慢锻炼的;

目录

一:【更新购物车某个商品的数量】接口说明;

1.【更新购物车某个商品的数量】接口文档;

2.【更新购物车某个商品的数量】接口,在界面上的表现;

二:正式开发;

1.在CartController中,创建更新购物车某个商品的数量的方法:update()方法;

2.在CartServiceImpl中,创建更新购物车某个商品的数量的方法update()方法;并在CartService中,反向生成方法的声明;

(1)在CartServiceImpl中,创建更新购物车某个商品的数量的方法update()方法;

(2)在CartService中,反向生成方法的声明;

三:测试;


一:【更新购物车某个商品的数量】接口说明;

1.【更新购物车某个商品的数量】接口文档;

说明:

(1)这个接口,参数只有productId和count;不能传入userId和cartId(这主要是出于安全考虑);

2.【更新购物车某个商品的数量】接口,在界面上的表现;

待写,项目上线后,回来补……


二:正式开发;

1.在CartController中,创建更新购物车某个商品的数量的方法:update()方法;
    
    @ApiOperation("更新购物车某个商品的数量")
    @PostMapping("/update")
    public ApiRestResponse update(@RequestParam("productId") Integer productId, @RequestParam("count") Integer count) {
        List cartVOList = cartService.update(UserFilter.currentUser.getId(), productId, count);
        return ApiRestResponse.success(cartVOList);
    }

说明:

(1)url,请求方式,参数要符合接口要求;

(2)因为,这个接口会被在【Spring Boot电商项目44:购物车模块二:统一校验当前是否有用户登录;】中编写的过滤器给处理;所以,我们可以通过UserFilter来获取当前登录用户;

(3)service层的更新购物车某个商品的数量方法update()方法,在下一部分介绍;

2.在CartServiceImpl中,创建更新购物车某个商品的数量的方法update()方法;并在CartService中,反向生成方法的声明;

(1)在CartServiceImpl中,创建更新购物车某个商品的数量的方法update()方法;
    
    @Override
    public List update(Integer userId, Integer productId, Integer count) {
        //更新的时候,我们也要检查下:【前台传过来的productId,对应的商品是否存在】、【商品是否是上架状态】、【商品库存是否足够】
        validProduct(productId, count);

        //然后,在看下购物车中,是否已经添加过了这个商品;;;理论上,既然是更新嘛,购物车中应该是已经添加过这个商品的;
        Cart cart = cartMapper.selectCartByUserIdAndProductId(userId, productId);
        if (cart == null) {
            //所以,如果购物车中没有这个商品;这就表示是有问题的;那么我们就不进行这个更新操作;返回“更新失败”异常;
            throw new ImoocMallException(ImoocMallExceptionEnum.UPDATE_FAILED);
        } else {
            //如果购物车中已经有了这个商品;那么我们就去更新购物车中该商品的数量;
            // 也就是说把该商品在购物车中的数量,更改为我们传入的数量count
            Cart cartNew = new Cart();
            cartNew.setQuantity(count);
            cartNew.setId(cart.getId());
            cartNew.setProductId(cart.getProductId());
            cartNew.setUserId(cart.getUserId());
            cartNew.setSelected(Constant.CartIsSelected.CHECKED);
            cartMapper.updateByPrimaryKeySelective(cartNew);
        }
        return this.list(userId);
    }

说明: 

(1)在更新的时候,自然也要考虑:【前台传过来的productId,对应的商品是否存在】、【商品是否是上架状态】、【商品库存是否足够】;(PS:很显然,这个检查是必要的)

(2)我们更新的时候,更新的是已经在购物车中的商品;但也需要检查下,这个商品究竟是不是在购物车中的;如果是,就正常操作;如果不是就报异常;(PS:这个【根据userId+productId,查cart的语句】,感觉似乎没有太大必要;;;;但是,必须要这么做,这不仅仅可以使程序逻辑更严谨;;;又因为我们出于安全考虑,接口没传cartId参数,所以,这儿我们必须要查一下cart;)


(2)在CartService中,反向生成方法的声明;


三:测试;

启动项目:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/775741.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号