说明:
(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中,反向生成方法的声明;
三:测试;
?启动项目:
|