在做商城專案實現購物車功能的時候除了個小bug...
阿新 • • 發佈:2018-12-10
@Autowired private ItemService itemService; @Value("${COOKIE_CART_EXPIRE}") private int COOKIE_CART_EXPIRE; @Autowired private CartService cartService; @RequestMapping("/cart/add/{itemId}") //響應一個頁面,所以用String public String addToCart(@PathVariable Long itemId,@RequestParam(defaultValue="1")Integer num, HttpServletRequest request,HttpServletResponse response) { //判斷使用者是不是登陸 TbUser user = (TbUser) request.getAttribute("user"); if(user!=null){ //登陸了的話,儲存到服務端,返回邏輯檢視 cartService.addCart(user.getId(), itemId, num); return "cartSuccess"; } //未登陸 //從cookie中取購物車列表 List<TbItem> cartList = getCartListFromCookie(request); //判斷商品在商品購物車列表中是不是存在 boolean flag = false; if(cartList!=null){ flag=true; }/////待會加點程式碼在這裡 //如果存在,就數量相加 if(flag) { for(TbItem tbItem:cartList) { if(tbItem.getId()==itemId.longValue()) { //找到商品,數量相加 tbItem.setNum(tbItem.getNum()+num); break; } } } //如果不存在,那就商品id查詢商品資訊,得到一個TbItem物件 if(!flag) { TbItem tbItem = itemService.getItemById(itemId); String image=null; //數量要換 tbItem.setNum(num); //取一張圖 image = tbItem.getImage(); if(StringUtils.isNotBlank(image)) { tbItem.setImage(image.split(",")[0]); } //把商品新增到商品購物車列表 cartList.add(tbItem); } //商品購物車列表寫入cookie CookieUtils.setCookie(request, response,"cart", JsonUtils.objectToJson(cartList),COOKIE_CART_EXPIRE,true); //返回成功頁面 return "cartSuccess"; }
Servlet.service() for servlet [e3-cart-web] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause java.lang.NullPointerException
at cn.e3mall.cart.controller.CartController.addToCart(CartController.java:80)
就是這個位置報了個空指標錯誤,我就一路找回去,發現邏輯上是有點不對,如果查到的cookie中的商品列表是空的也就是說List<TbItem> cartList =null;這個時候我是不可以給這個cartList 新增任何東西的,必須要先給他一個空集合才可以新增商品。
所以我在上面判斷加了一句:
else { cartList=new ArrayList<TbItem>(); }
將cartList初始化再來加商品,就可以運行了。