Cacheable序列化乱码

场景

原本希望序列化为json格式的数据在redis中乱码

返回前端数据

image.png

redis 存储格式

image.png

缓存方法

@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(); } image.png

但是分页方法还是展示失败,说是JSON序列化器不支持localdatetime格式的时间

image.png

image.png 添加依赖

``` com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.14.2

```

实体类的时间属性添加注解 @JsonDeserialize(using = LocalDateTimeDeserializer.class) @JsonSerialize(using = LocalDateTimeSerializer.class)

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值