将商品添加到购物车【小技巧】

  1. 假如 http://www.cart.mall.com/addToCart api 这样写
    @Controller
    public class CartController {
    	@GetMapping("/addToCart")
    	public String addToCart(@RequestParam("skuId") Long skuId, @RequestParam("num") Integer num,
    	                        RedirectAttributes ra)
    	        throws ExecutionException, InterruptedException {
    	
    	    // 添加成功,跳转到success页面
    	    cartService.addToCart(skuId, num);
    	
    	    model.addAttribute("item", cartItem);
    	    return "success";
    	}
    }
    
    当在浏览器中多次刷地址 http://www.cart.mall.com/addToCart?skuId=1&num=1 ,就会不断地向购物车中假如商品。为了避免这种情况,可以使用重定向。
  2. 使用重定向技术,接口防刷
    @Controller
    public class CartController {
        @GetMapping("/addToCart")
        public String addToCart(@RequestParam("skuId") Long skuId, @RequestParam("num") Integer num,
                                RedirectAttributes ra)
                throws ExecutionException, InterruptedException {
    
            // 添加成功,跳转到success页面
            cartService.addToCart(skuId, num);
    
            // 将skuId放在model中,重定向的时候,会拼在url后面
            // 放在model中,本质是放在request作用域名,只对当前请求有效
            // redirectAttributes可以重定向携带数据
            ra.addAttribute("skuId", skuId);
            return "redirect:http://www.cart.mall.com/addToCartSuccess.html";
        }
    
        /**
         * 为了防止重复添加,就是多次刷新购物车结果页面,
         * 重复添加商品,那么将商品添加成功后,重定向到结果页面
         * 这里拿到skuId后,去重新查一下购物车
         * 跳转到成功页面
         */
        @GetMapping("/addToCartSuccess.html")
        public String addToCartSuccessPage(@RequestParam("skuId") Long skuId, Model model) {
            // 重定向成功页面,再次查询购物车即可
            CartItem cartItem = cartService.getCartItem(skuId);
            model.addAttribute("item", cartItem);
            return "success";
        }
    }
    
    当在浏览器地址栏中输入 http://www.cart.mall.com/addToCart?skuId=1&num=1 点回车后,该商品会假如购物车,然后,利用重定向技术,浏览器地址栏中 url变为 http://www.cart.mall.com/addToCartSuccess.html?skuId=1,这样就避免了多次刷地址 http://www.cart.mall.com/addToCart?skuId=1&num=1的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值