//TODO 5、防重令牌(防止表单重复提交)
//为用户设置一个token,三十分钟过期时间(存在redis)
String token = UUID.randomUUID().toString().replace("-", "");
redisTemplate.opsForValue().set(USER_ORDER_TOKEN_PREFIX+memberResponseVo.getId(),token,30, TimeUnit.MINUTES);
confirmVo.setOrderToken(token);
生成uuid 作为redis 的key
redis脚本程序判断判断前端传递过来的数据是否和后端一致
//1、验证令牌是否合法【令牌的对比和删除必须保证原子性】
String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
String orderToken = vo.getOrderToken();
//通过lure脚本原子验证令牌和删除令牌
Long result = redisTemplate.execute(new DefaultRedisScript<Long>(script, Long.class),
Arrays.asList(USER_ORDER_TOKEN_PREFIX + memberResponseVo.getId()),
orderToken);
集合转为string
//使用StringUtils.collectionToDelimitedString将list集合转换为String
String skuAttrValues = StringUtils.collectionToDelimitedString(items.getSkuAttrValues(), ";");
三级菜单:
@Override
public List<PmsCategory> getTree() {
List<PmsCategory> all = pmsCategoryMapper.queryAll();
List<PmsCategory> lv1Menu = all.stream().filter( menu ->
menu.getParentCid() == 0
).map( (menu) -> {
//通过递归找到子分类
menu.setChild( getChild( menu, all ) );
return menu;
} ).collect( Collectors.toList() );
return lv1Menu;
}
private List<PmsCategory> getChild(PmsCategory root, List<PmsCategory> all) {
List<PmsCategory> child = all.stream().filter( menu ->
menu.getParentCid() == root.getCatId() ).map( (menu) -> {
//通过递归找到子分类
menu.setChild( getChild( menu, all ) );
return menu;
} ).collect( Collectors.toList() );
return child;
}
开发中去除一部分依赖:
<dependency>
<groupId>org.example</groupId>
<artifactId>gulimall-common</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</exclusion>
</exclusions>
</dependency>
校验方式;
@NotEmpty 校验集合;@NotBlank 校验String类型;@NotNull 校验基本类型