java商城项目实战之购物车功能实现

2025-05-29 0 51

本文实例为大家分享了java实现购物车功能的具体代码,供大家参考,具体内容如下

1 需要实现

1、实现淘淘商城购物车功能

2 购物车功能

2.1 功能说明

1、商品加入购物车时,不是必须要求登录。京东不需要登录,淘宝需要登录。各有好处。

2、计算购物车中商品的总价。当商品数量发生变化时需要重新计算。

3、用户可以删除购物车中的商品。

4、用户下单后,删除购物车的功能。

购物车在用户不登陆的情况下也可以使用购物车。需要把购物车的商品信息写入cookie中。所有对购物车的操作都是操作cookie。有效 的降低数据库的压力。

缺点:换一台电脑后购物车的商品不能同步。

实现的工程:taotao-protal中实现购物车功能。只需要调用商品信息的服务,除此之外不需要和其他系统交互。

2.2 功能分析

1、在用户不登陆的清空下也可以使用购物车,那么就需要把购物车信息放入cookie中。

2、可以把商品信息,存放到pojo中,然后序列化成json存入cookie中。

3、取商品信息可以从cookie中把json数据取出来,然后转换成java对象即可。

4、此功能只需要操作cookie不需要数据库的支持,所以只需要在taotao-portal中实现即可。

5、购物车分有四种动作

a) 添加商品

b) 修改商品数量

c) 删除购物车中的商品

d) 展示购物车商品列表

2.3 添加购物车商品

在商品详情页面点击“加入购物车”按钮提交一个请求吧商品id传递给controller,controller接收id,controller调用service根据商品id查询商品基本信息。把商品写入cookie中,加入cookie之前先从cookie中把购物车的商品取出来判断当前购物车商品列表中是否有此商品,如果有数量加一,如果没有添加一个商品,数量为1。展示给用户购物车列表。

2.3.1 service

功能:接收一个商品id,数量(默认为1),根据商品id查询商品信息。调用taotao-rest的服务。把商品添加到购物车,先把购物车商品列表取出来,判断列表中是否有此商品,如果有就增加数量就可以了。如果没有把此商品添加到商品列表。返回添加成功taotaoresult。

功能:

1、接收controller传递过来的商品id,根据商品id查询商品信息。

2、从cookie中取出购物车信息,转换成商品pojo列表。

3、把商品信息添加到商品列表中。

参数:

1、商品id

2、request

3、response

返回值:

taotaoresult

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77
@service

public class cartserviceimpl implements cartservice {

//服务url

@value("${rest_base_url}")

private string rest_base_url;

//商品服务url

@value("${items_item_url}")

private string items_item_url;

//cookie中购物车商品对应的key

@value("${cart_items_list_key}")

private string cart_items_list_key;

//购物车cookie生存期

@value("${cart_items_expire_time}")

private integer cart_items_expire_time;

/**

* 添加购物车商品

* <p>title: additem</p>

* <p>description: </p>

* @param itemid

* @param request

* @param response

* @return

* @see com.taotao.portal.service.cartservice#additem(java.lang.long, javax.servlet.http.httpservletrequest, javax.servlet.http.httpservletresponse)

*/

@override

public taotaoresult additem(long itemid, httpservletrequest request, httpservletresponse response) {

//根据商品id查询商品信息

item item = getitembyid(itemid);

if (item == null) return taotaoresult.build(400, "未查询到该商品信息");

//取cookie中购物车商品列表

list<item> cartitems = getitemlistfromcookie(request);

//判断该商品是否存在于购物车中

boolean itemexists = false;

for (item i : cartitems) {

if (i.getid().longvalue() == itemid.longvalue()) {

//购物车中有此商品

i.setnum(i.getnum() + 1);

itemexists = true;

break;

}

}

//如果商品不存在于购物车则向购物车商品列表中添加一个商品

if (! itemexists) {

//设置数量为1

item.setnum(1);

//把商品添加到购物车

cartitems.add(item);

}

//把购物车信息写入cookie中

cookieutils.setcookie(request, response, cart_items_list_key, jsonutils.objecttojson(cartitems), cart_items_expire_time, true);

return taotaoresult.ok(cartitems);

}

private item getitembyid(long itemid) {

//根据商品id查询商品信息

string resultstr = httpclientutil.doget(rest_base_url + items_item_url + itemid);

//转换成taotaoresult

taotaoresult result = taotaoresult.formattopojo(resultstr, item.class);

//取商品信息

item item = null;

if (result.getstatus() == 200) {

item = (item) result.getdata();

}

return item;

}

private list<item> getitemlistfromcookie(httpservletrequest request) {

//取cookie中购物车商品列表

string cartitemsstr = cookieutils.getcookievalue(request, cart_items_list_key, true);

//如果不为空那么就转换成java对象

list<item> cartitems = null;

if (!stringutils.isblank(cartitemsstr)) {

cartitems = jsonutils.jsontolist(cartitemsstr, item.class);

} else {

cartitems = new arraylist<>();

}

return cartitems;

}

}

2.3.2 商品pojo

商品pojo需要使用taotao-portal中的item。此pojo在反序列化时会抛异常。需要做如下修改:

java商城项目实战之购物车功能实现

2.3.3 controller

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21
@controller

@requestmapping("/cart")

public class cartcontroller {

@autowired

private cartservice cartservice;

@requestmapping("/add/{itemid}")

public string additem(@pathvariable long itemid,

httpservletrequest request, httpservletresponse response, model model) {

//添加商品信息

taotaoresult result = cartservice.additem(itemid, request, response);

//错误信息

if (result.getstatus() != 200) {

model.addattribute("message", result.getmsg());

return "error/exception";

}

//把购物车中的商品传递给页面

model.addattribute("cartlist", result.getdata());

return "cart";

}

}

用户点击“我的购物车”展示购物车信息

2.4 展示购物车商品

2.4.1 service

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18
/**

* 取购物车列表

* <p>

* title: getcartitemslist

* </p>

* <p>

* description:

* </p>

*

* @return

* @see com.taotao.portal.service.cartservice#getcartitemslist()

*/

@override

public list<item> getcartitemslist(httpservletrequest request) {

// 从cookie中取商品列表

list<item> itemslist = getitemlistfromcookie(request);

return itemslist;

}

2.4.2 controller

?

1

2

3

4

5

6

7
@requestmapping("/cart")

public string showcart(httpservletrequest request, model mode) {

//取购物车信息

list<item> list = cartservice.getcartitemslist(request);

mode.addattribute("cartlist", list);

return "cart";

}

2.5 修改商品数量

当点击购物车商品的“+”、“-”号时增加或减少商品数量。减少商品数量时,如果数量为“1”则不继续减少。

2.5.1 service

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27
/**

* 修改指定商品的数量

* <p>title: changeitemnum</p>

* <p>description: </p>

* @param itemid

* @param num

* @param request

* @param response

* @return

* @see com.taotao.portal.service.cartservice#changeitemnum(long, int, javax.servlet.http.httpservletrequest, javax.servlet.http.httpservletresponse)

*/

@override

public taotaoresult changeitemnum(long itemid, int num, httpservletrequest request, httpservletresponse response) {

//从cookie中取商品列表

list<item> list = getitemlistfromcookie(request);

//从商品列表中找到要修改数量的商品

for (item item : list) {

if (item.getid() == itemid) {

//找到商品,修改数量

item.setnum(num);

break;

}

}

//把商品信息写入cookie

cookieutils.setcookie(request, response, cart_items_list_key, jsonutils.objecttojson(list), cart_items_expire_time, true);

return taotaoresult.ok();

}

2.5.2 controller

?

1

2

3

4

5

6

7
@requestmapping("/update/num/{itemid}/{num}")

@responsebody

public taotaoresult updatenumbyid(@pathvariable long itemid, @pathvariable integer num,

httpservletrequest request, httpservletresponse response) {

taotaoresult result = cartservice.changeitemnum(itemid, num, request, response);

return result;

}

2.6 删除购物车商品

2.6.1 service

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31
/**

* 删除购物车中的商品

* <p>

* title: deleteitem

* </p>

* <p>

* description:

* </p>

*

* @param itemid

* @param request

* @param response

* @return

* @see com.taotao.portal.service.cartservice#deleteitem(java.lang.long,

* javax.servlet.http.httpservletrequest,

* javax.servlet.http.httpservletresponse)

*/

@override

public list<item> deleteitem(long itemid, httpservletrequest request, httpservletresponse response) {

list<item> itemslist = getcartitemslist(request);

// 找到购物车中的商品,并删除之

for (item item : itemslist) {

if (item.getid().longvalue() == itemid.longvalue()) {

itemslist.remove(item);

break;

}

}

// 更新cookie中的购物车数据

cookieutils.setcookie(request, response, cart_items_list_key, jsonutils.objecttojson(itemslist), cart_items_expire_time, true);

return itemslist;

}

2.6.2 controller

?

1

2

3

4

5

6

7

8
@requestmapping("/delete/{itemid}")

public string deleteitembyid(@pathvariable long itemid,

httpservletrequest request, httpservletresponse response,

model model) {

list<item> list = cartservice.deleteitem(itemid, request, response);

model.addattribute("cartlist", list);

return "cart";

}

购物车存在的问题

1、更换设备购物车商品不能同步

a) 不能把购物车商品保存到数据库

b) 要求用户登录才能同步信息

c) 可以把购物车信息保存到redis中,key就是用户,value就是购物车列表

d) 购物车商品合并的问题。

2、提交订单后购物车商品需要清空。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:https://blog.csdn.net/xxssyyyyssxx/article/details/72876247

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java商城项目实战之购物车功能实现 https://www.kuaiidc.com/111746.html

相关文章

发表评论
暂无评论