IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Spring Boot电商项目48:购物车模块六:【删除购物车的某个商品】接口; -> 正文阅读

[游戏开发]Spring Boot电商项目48:购物车模块六:【删除购物车的某个商品】接口;

说明:

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

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

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

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

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

目录

一:【 删除购物车的某个商品】接口说明;

1.【?删除购物车的某个商品】接口文档;

2.【删除购物车的某个商品】接口,在界面上的表现;

?二:正式开发;

1.在CartController中,创建删除购物车的某个商品的方法:delete()方法;

2.在CartServiceImpl中,创建删除购物车某个商品的方法delete()方法;并在CartService中,反向生成方法的声明;

(1)在CartServiceImpl中,创建删除购物车某个商品的方法delete()方法;

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

三:测试;


一:【 删除购物车的某个商品】接口说明;

1.【?删除购物车的某个商品】接口文档;

说明:

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

2.【删除购物车的某个商品】接口,在界面上的表现;

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


?二:正式开发;

1.在CartController中,创建删除购物车的某个商品的方法:delete()方法;

    /**
     * 购物车模块:删除购物车的某个商品
     * @param productId
     * @return
     */
    @ApiOperation("删除购物车的某个商品")
    @PostMapping("/delete")
    public ApiRestResponse delete(@RequestParam("productId") Integer productId) {
        List<CartVO> cartVOList = cartService.delete(UserFilter.currentUser.getId(), productId);
        return ApiRestResponse.success(cartVOList);
    }

说明:

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

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

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

2.在CartServiceImpl中,创建删除购物车某个商品的方法delete()方法;并在CartService中,反向生成方法的声明;

(1)在CartServiceImpl中,创建删除购物车某个商品的方法delete()方法;

    /**
     * 删除购物车中的某个商品
     * @param userId
     * @param productId
     * @return
     */
    @Override
    public List<CartVO> delete(Integer userId, Integer productId) {

        //首先,根据userId和productId,去查一下,看购物车中是否有对应的数据
        Cart cart = cartMapper.selectCartByUserIdAndProductId(userId, productId);
        if (cart == null) {
            //所以,如果购物车中没有这个商品;那么很显然,是无法删除的(都没有,怎么删除……);于是,就抛出“删除失败”异常;
            throw new ImoocMallException(ImoocMallExceptionEnum.DELETE_ERROR);
        } else {
            //如果购物车中有这个商品,那么我们就可以正常去删除了
            cartMapper.deleteByPrimaryKey(cart.getId());
        }
        return this.list(userId);
    }

说明:?

(1)删除的时候,需要先看下,根据【当前用户 +?productid】两个条件,看下购物车中,我们要删除的这个商品是否存在;如果存在就去删除,否则就抛出“删除失败”异常;

(2)删除的时候,我们使用了【mybatis-generator】帮帮我们自动生成的删除方法:deleteByPrimaryKey()方法;


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


三:测试;

?启动项目:

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:25:48  更:2022-03-21 21:28:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 18:48:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码