spingboot2redis问题处理

编程

因为我用的json序列化保存到redis的,当获取SET集合的时候强制转换会失败的

就是 Object无法转换你写的实体类 这时候处理的手段是 添加了两成转化

/**

* 获取群组用户

* @param groupID

* @return

*/

public static Set<ChartUser> getGroupUser(ChatGroup groupID){

return (Set<ChartUser>)(Set<?>)redisService.getSet(RedisPre.DB_GROUP_SET+groupID.getGroupCode());

}

2.读取redis的时候因为我用的是json串可能没有反序列化数据

这里就是你的序列化工具调整为是否所有字段都存在才反序列化处理

3.我这里想再序列化的数据中某些数据可以过滤掉一些字段

暂且没想到好的办法,这里采用了两个连接(例如a正常所有字段,b只有一些关键字段)

这里用了2.10.版本的jackson,其他网上找的有漏洞使用的方法已被禁用了

@Configuration

public class RedisConfig {

@Bean

public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

// 配置redisTemplate

RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();

redisTemplate.setConnectionFactory(redisConnectionFactory);

RedisSerializer stringSerializer = new StringRedisSerializer();

redisTemplate.setKeySerializer(stringSerializer); // key序列化

redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); // value序列化

redisTemplate.setHashKeySerializer(stringSerializer); // Hash key序列化

redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); // Hash value序列化

redisTemplate.afterPropertiesSet();

return redisTemplate;

}

@Bean

public RedisTemplate<String, Object> redisTemplateGroup(RedisConnectionFactory redisConnectionFactory) {

// 配置redisTemplate

RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();

redisTemplate.setConnectionFactory(redisConnectionFactory);

RedisSerializer stringSerializer = new StringRedisSerializer();

redisTemplate.setKeySerializer(stringSerializer); // key序列化

redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer(getMapper())); // value序列化

redisTemplate.setHashKeySerializer(stringSerializer); // Hash key序列化

redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer(getMapper())); // Hash value序列化

redisTemplate.afterPropertiesSet();

return redisTemplate;

}

// 获取JSON工具

private final ObjectMapper getMapper() {

ObjectMapper mapper = new ObjectMapper();

JsonFilterUtil.addFilterForMapper(mapper);

//将类名称序列化到json串中,去掉会导致得出来的的是LinkedHashMap对象,直接转换实体对象会失败

mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL); //设置输入时忽略JSON字符串中存在而Java对象实际没有的属性

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

return mapper;

}

}

以上是 spingboot2redis问题处理 的全部内容, 来源链接: utcz.com/z/516703.html

回到顶部