场景
原本希望序列化为json格式的数据在redis中乱码
返回前端数据
redis 存储格式
缓存方法
@GetMapping("/getPage") @Cacheable(value="areaPage",key="'areaPage_'+#page+'_'+#size") public ResponseResult getPage(@RequestParam("page") int page, @RequestParam("size") int size) { PageRequestDto pageDTO = new PageRequestDto(); pageDTO.setPage(page); pageDTO.setSize(size); return areaService.getPage(pageDTO); }
解决策略
添加config
``` import org.springframework.boot.autoconfigure.cache.CacheProperties; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializationContext;
/** *
RedisConfig 此类用于:Redis相关配置,用于解决存入Redis中值乱码问题
*/ @EnableCaching @Configuration public class RedisConfig extends CachingConfigurerSupport {@Bean
public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
CacheProperties.Redis redisProperties = cacheProperties.getRedis();
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
// 序列化值
config = config.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()));
if (redisProperties.getTimeToLive() != null) {
config = config.entryTtl(redisProperties.getTimeToLive());
}
if (redisProperties.getKeyPrefix() != null) {
config = config.prefixKeysWith(redisProperties.getKeyPrefix());
}
if (!redisProperties.isCacheNullValues()) {
config = config.disableCachingNullValues();
}
if (!redisProperties.isUseKeyPrefix()) {
config = config.disableKeyPrefix();
}
return config;
}
} ```
展示
一
此时如下方法缓存成功且展示效果正常 @Autowired private CityService cityService; @GetMapping("/getAll") @Cacheable(value="cityList",key="'cityList'",sync = true) public ResponseResult getAll(){ return cityService.getAll(); }
二
但是分页方法还是展示失败,说是JSON序列化器不支持localdatetime
格式的时间
添加依赖
``` com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.14.2
```
实体类的时间属性添加注解 @JsonDeserialize(using = LocalDateTimeDeserializer.class) @JsonSerialize(using = LocalDateTimeSerializer.class)