一、大概思路
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 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 getcartfromcookie(httpservletrequest request) {
try {
string json = cookieutils.getcookievalue(request, "tt_token", true);
list 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";
}
}
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!