springboot的Cookie使用(添加cookies,获取/查询cookies,设置cookies过期时间)
上篇博客说到的做"历史浏览记录"使用到的cookie.这里记录一下,方便今后学习使用!!!
lombok依赖
<!--lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
CookieUtils工具类
package com.example.demo.util;
import javax.servlet.http.Cookie;
public class CookieUtils {
/**
* 寻找指定 cookieName 的cookie
* @param cookies
* @param cookieName
* @return
*/
public static Cookie getCookie(Cookie[] cookies, String cookieName) {
if (null == cookies) {
return null;
} else {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(cookieName)) {
return cookie;
}
}
return null;
}
}
}
实体Bean
HistoryBo
package com.example.demo.controller;
import lombok.Data;
@Data
public class HistoryBo {
private String userId;
private Long spuId;
}
Product
package com.example.demo.bo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product {
private String id;
private String title;
private String price;
private String producturl;
private Double pic;
}
添加Cookie
将spuId的拼接好的字符串返回去.格式为:17#16#15#14.cookiesName为:userId
最新增加到cookie里的在最前面,这里只保留4条cookies记录
/**
* 添加历史记录到Cookie中
* @param request
* @param response
*/
@PostMapping("/add")
public String addMarket(@RequestBody HistoryBo bo, HttpServletRequest request, HttpServletResponse response){
Cookie[] cookies = request.getCookies();
Cookie cookie = CookieUtils.getCookie(cookies, bo.getUserId());
String userIds = "";
if(null != cookie){
userIds = cookie.getValue();
if(userIds.indexOf("#") > 0){
String[] str = userIds.split("#");
boolean flag = false;
for (String s : str) {
if(s.equals(bo.getSpuId().toString())){
flag = true;
break;
}
}
if(!flag){
if (str.length > 3) {
// 历史记录只保存4个,新增的会覆盖掉最先新增的
userIds = userIds.substring(0, userIds.lastIndexOf("#"));
userIds = bo.getSpuId().toString() + "#" + userIds;
cookie = new Cookie(bo.getUserId(), userIds);
response.addCookie(cookie);
} else {
userIds = bo.getSpuId().toString() + "#" + userIds;
cookie = new Cookie(bo.getUserId(), userIds);
response.addCookie(cookie);
}
}
} else {
if (!userIds.equals(bo.getSpuId().toString())){
userIds = bo.getSpuId().toString() + "#" + userIds;
cookie = new Cookie(bo.getUserId(), userIds);
response.addCookie(cookie);
}
}
} else {
cookie = new Cookie(bo.getUserId(), bo.getSpuId().toString());
response.addCookie(cookie);
}
return userIds;
}
cookie的过期时间设置
// 不记录cookie
cookie.setMaxAge(0);
// 会话级cookie,关闭浏览器失效
cookie.setMaxAge(-1);
// 过期时间为1小时单位是秒
cookie.setMaxAge(60 * 60);
获取/查看Cookies
/**
* 读取cookies存储数据
* @param request
* @param response
* @return
*/
@GetMapping("/get")
public List<Product> getProducts(String cookieName, HttpServletRequest request, HttpServletResponse response) {
List<Product> list = new ArrayList<>();
Cookie[] cookies = request.getCookies();
Cookie cookie = CookieUtils.getCookie(cookies, cookieName);
if(null == cookie){
return new ArrayList<>();
}
String values = cookie.getValue();
String[] str = values.split("#");
for (String id : str) {
// TODO 根据id获取商品
Product product = new Product();
product.setId(id);
list.add(product);
}
return list;
}
测试
新增
获取/查看cookies
get请求.只有4条数据.结果是OK!!!
欢迎大佬们留言评论,共同学习!!!感谢!!!
===========================
原创文章,转载注明出处!