Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6687
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 35
  • 用 户 组: 普通用户
  • 注册时间: 2021-10-25 09:34
文章分类

全部博文(3)

文章存档

2021年(3)

我的朋友
最近访客

分类: Java

2021-10-25 14:10:20

在从Redis获取带有LocalDateTime类型属性的对象时,产生序列化和反序列化问题解决办法
方式一:实体类上指定LocalDateTime的序列化器和反序列化器



点击(此处)折叠或打开

  1. @JsonDeserialize(using = LocalDateTimeDeserializer.class) //反序列化
  2.   @JsonSerialize(using = LocalDateTimeSerializer.class) //序列化
  3.   private LocalDateTime birthday

方式二:在Redis的配置类中指明序列化的方式



点击(此处)折叠或打开

  1. @Configuration
  2.     public class RedisConfig {
  3.     private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  4.     private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  5.     private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");

  6.     @Bean
  7.     public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
  8.         RedisTemplate<String, Object> template = new RedisTemplate<>();
  9.         template.setConnectionFactory(redisConnectionFactory);

  10.         /**
  11.          * JSON序列化
  12.          */
  13.         Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
  14.         ObjectMapper mapper = new ObjectMapper();
  15.         //取消时间转换格式,默认是时间戳,同时需要设置要表现的时间格式
  16.         mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
  17.         mapper.configure(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, false);
  18.         mapper.setDateFormat(new SimpleDateFormat("yyy-MM-dd HH:mm:ss"));

  19.         //默认序列化没有实现,反序列化有实现
  20.         JavaTimeModule javaTimeModule = new JavaTimeModule();

  21.         javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DATE_TIME_FORMATTER));// javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DATE_FORMATTER));// javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(TIME_FORMATTER));

  22.         mapper.registerModule(javaTimeModule);
  23.         //设置时区
  24.         mapper.setTimeZone(TimeZone.getDefault());
  25.         //设置格式化输出// MAPPER.enable(SerializationFeature.INDENT_OUTPUT);
  26.         //设置格式化输出
  27.         mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
  28.         mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  29.         serializer.setObjectMapper(mapper);
  30. // StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
  31.         template.setKeySerializer(serializer);
  32.         template.setHashKeySerializer(serializer);
  33.         template.setValueSerializer(serializer);
  34.         template.setHashValueSerializer(serializer);
  35.         return template;
  36.     }}                                                                                 好买网        IT技术交易平台

阅读(1547) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Linux操作系统

给主人留下些什么吧!~~