up:: SpringBoot电商项目购物车模块添加商品到购物车接口
说明:
(1) 本篇博客的主要内容是,开发【更新购物车某个商品的数量】接口;
(2)本篇博客出于安全考虑:而采用的一种广泛采用的做法:
● 接口不能传入用户id,而是要在程序内部获取;
否则,如果接口参数中有用户id的话,这很可能会被黑客利用,黑客就可以通过这个接口随意修改任何人的购物车中的商品了;(PS:这也能有效防止横向越权)
● 接口不能传入cartId,而是要去数据库中查; 否则,黑客可能会胡乱更新购物车中的数据,导致更新其他人的购物车数据 ;
● 其实,由此,也能感受到【接口的设计能力】,这个能力也是需要慢慢锻炼的;
一:【更新购物车某个商品的数量】接口说明;
1.【更新购物车某个商品的数量】接口文档;
说明:
(1) 这个接口,参数只有productId和count;不能传入userId和cartId(这主要是出于安全考虑);
2.【更新购物车某个商品的数量】接口,在界面上的表现;
待写,项目上线后,回来补……
二:正式开发;
1.在CartController中,创建更新购物车某个商品的数量的方法:update()方法;
说明:
(1) url,请求方式,参数要符合接口要求;
(2) 因为,这个接口会被在【SpringBoot电商项目购物车模块统一校验当前是否有用户登录】中编写的过滤器给处理;所以,我们可以通过UserFilter来获取当前登录用户;
(3) service层的更新购物车某个商品的数量方法update()方法,在下一部分介绍;
2.在CartServiceImpl中,创建更新购物车某个商品的数量的方法update()方法;并在CartService中,反向生成方法的声明;
(1)在CartServiceImpl中,创建更新购物车某个商品的数量的方法update()方法;
说明:
(1) 在更新的时候,自然也要考虑:【前台传过来的productId,对应的商品是否存在】、【商品是否是上架状态】、【商品库存是否足够】;(PS:很显然,这个检查是必要的)
(2) 我们更新的时候,更新的是已经在购物车中的商品;但也需要检查下,这个商品究竟是不是在购物车中的;如果是,就正常操作;如果不是就报异常;(PS:这个【根据userId+productId,查cart的语句】,感觉似乎没有太大必要;但是,必须要这么做,这不仅仅可以使程序逻辑更严谨;;;又因为我们出于安全考虑,接口没传cartId参数,所以,这儿我们必须要查一下cart;)
(2)在CartService中,反向生成方法的声明;
三:测试;
启动项目: