cookie來實現購物車功能

来源:https://www.cnblogs.com/huclouy/archive/2018/08/19/9498374.html
-Advertisement-
Play Games

一、大概思路 1、從cookie中取商品列表 2、判斷要添加的商品是否存在cookie中。 3、如果已添加過,則把對應的商品取出來,把要添加的商品的數量加上去。 4、如果沒有添加過,則把改商品添加到商品列表中。 5、再把商品列表序列化,加入cookie中。 二、代碼實現 1、定義一個購物車商品的po ...


一、大概思路

  1、從cookie中取商品列表

  2、判斷要添加的商品是否存在cookie中。

  3、如果已添加過,則把對應的商品取出來,把要添加的商品的數量加上去。

  4、如果沒有添加過,則把改商品添加到商品列表中。

  5、再把商品列表序列化,加入cookie中。

二、代碼實現

  1、定義一個購物車商品的pojo

public class CartItem {

    private Long id;

    private String title;

    private Long price;

    private Integer num;

    private String image;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Long getPrice() {
        return price;
    }

    public void setPrice(Long price) {
        this.price = price;
    }

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }
}

  2、定義一個購物車的介面和實現類

public interface CartService {

    TaotaoResult addCartService(HttpServletRequest request, HttpServletResponse response, Long itemId, Integer num);
}
@Service
public class CartServiceImpl implements CartService {

    @Autowired
    private ItemService itemService;
    @Value("${COOKIE_EXPIRE}")
    private Integer COOKIE_EXPIRE;

    @Override
    public TaotaoResult addCartService(HttpServletRequest request, HttpServletResponse response, Long itemId, Integer num) {
        // 1.從cookie中取商品列表
        List<CartItem> list = getCartFromCookie(request);
        // 2.判斷是否已經添加過購物車
        boolean haveflag = false;
        for (CartItem c : list) {
            //3.如果添加過,把對應的商品取出來,數量加Num
            if(c.getId().longValue() == itemId) {
                c.setNum(c.getNum() + num);
                haveflag = true;
                break;
            }
        }
        // 4.如果沒添加過,則把該商品添加進去。
        if (!haveflag) {
            TbItem item = itemService.getItemById(itemId);
            CartItem cartItem = new CartItem();
            cartItem.setNum(num);
            cartItem.setId(itemId);
            cartItem.setPrice(item.getPrice());
            cartItem.setTitle(item.getTitle());
            if (item.getImage() != null) {
                String image = item.getImage();
                String[] strings = image.split(",");
                cartItem.setImage(strings[0]);
            }
            list.add(cartItem);
        }
        // 5.再把list返回到cookie中
        CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(list), COOKIE_EXPIRE);
      
return TaotaoResult.ok(); } private List<CartItem> getCartFromCookie(HttpServletRequest request) { try { String json = CookieUtils.getCookieValue(request, "TT_TOKEN", true); List<CartItem> list = JsonUtils.jsonToList(json, CartItem.class); if (list == null) { return new ArrayList<>(); }else { return list; } }catch (Exception e) { return new ArrayList<>(); } } }

   3、controller來接收前端的請求,並響應到cart-success.jsp頁面。

@Controller
public class CartController {

    @Autowired
    private CartService cartService;

    @RequestMapping("/cart/add/{itemId}")
    public String addCart(@PathVariable Long itemId, Integer num, HttpServletRequest request, HttpServletResponse response) {
        TaotaoResult result = cartService.addCartService(request, response, itemId, num);
        return "cart-success";
    }
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 設置 vim ~/.zshrc設置 vim ~/.bash_profile ...
  • c/c++ 淺拷貝 編譯器合成的 拷貝構造函數 和 =重載函數 ,只是做入下處理: 如果成員變數a是指針,執行完 拷貝構造函數 或者 =重載函數 後,對象1和對象2的成員變數就指向了一個地址了,所以當改變對象1的a的值,對象2的a的值也變化了, 而且,如果在析構函數里寫了free(a)的話,就相當於 ...
  • c/c++ 編譯器提供的預設6個函數 1,構造函數 2,拷貝構造函數 3,析構函數 4,=重載函數 5,&重載函數 6,const&重載函數 c++ include using namespace std; class Test{ public: Test(int d = 0):data(d){ c ...
  • 前言 上一章我們知道瞭如何使用幾何著色器將頂點通過流輸出階段輸出到綁定的頂點緩衝區。接下來我們繼續利用它來實現一些新的效果,在這一章,你將瞭解: 1. 實現公告板效果 2. Alpha To Coverage 3. 對GPU資源進行讀/寫操作 4. 紋理數組 5. 實現霧效 "DirectX11 W ...
  • 1.查看是否已經安裝Python CentOS 7.2 預設安裝了python2.7.5 因為一些命令要用它比如yum 它使用的是python2.7.5。 使用 python -V 命令查看一下是否安裝Python 然後使用命令 which python 查看一下Python可執行文件的位置 可見執 ...
  • 裝飾器(decorator)是一種高級Python語法。裝飾器可以對一個函數、方法或者類進行加工。在Python中,我們有多種方法對函數和類進行加工,比如在Python閉包中,我們見到函數對象作為某一個函數的返回結果。相對於其它方式,裝飾器語法簡單,代碼可讀性高。因此,裝飾器在Python項目中有廣 ...
  • 靜態語言 在編寫代碼時,必須為變數指定一個明確類型的語言。比如Java、C/C++ 動態語言 在編寫代碼時,不必為變數指定一個明確的類型,而是由解釋器在運行時根據變數的使用情況確定變數的類型。比如python、javascript 強類型語言 變數必須有一個確定的類型。比如Java、C/C++、py ...
  •   Python一切皆對象(object),每個對象都可能有多個屬性(attribute)。Python的屬性有一套統一的管理方案。   屬性的__dict__系統 對象的屬性可能來自於其類定義,叫做類屬性(class attribute)。類屬性可能來自類定義自身,也可能根據類 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...