账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    java redis 序列化 java 8 中 localdate, localdatetime 出现的 问题?
    51
    0
    1. 在使用redis时, redis 序列化出错

      Could not read JSON: Can not construct instance of com.xxx.xxx.controller.TestObj: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)
    2. 我使用了

      <!-- json serialization -->
          <dependency>
              <groupId>com.fasterxml.jackson.module</groupId>
              <artifactId>jackson-module-parameter-names</artifactId>
          </dependency>
          <dependency>
              <groupId>com.fasterxml.jackson.datatype</groupId>
              <artifactId>jackson-datatype-jdk8</artifactId>
          </dependency>
          <dependency>
              <groupId>com.fasterxml.jackson.datatype</groupId>
              <artifactId>jackson-datatype-jsr310</artifactId>
          </dependency>

    redis 的配置:

     @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
    
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(
                Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    
        om.registerModule(new ParameterNamesModule())
                .registerModule(new Jdk8Module())
                .registerModule(new JavaTimeModule()); 
        om.findAndRegisterModules();
    
        jackson2JsonRedisSerializer.setObjectMapper(om);
    
        template.setKeySerializer(new GenericToStringSerializer<Object>(Object.class));
        template.setHashKeySerializer(new GenericToStringSerializer<Object>(Object.class));
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
    
    
    但是没有什么效果,序列化出来的字符串没有类型信息, 无法反序列化
    
    

    如何实现redis的 RedisSerializer 接口?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • liQvQil 普通会员 1楼

      在Java 8中,LocalDateLocalDateTime提供了日期和时间的本地化功能,这使得Java应用程序在处理日期和时间时具有更好的可读性和可维护性。

      然而,如果你在使用这些日期和时间类型时遇到问题,可能有以下原因:

      1. 缺乏兼容性:不同的日期和时间格式可能会导致问题。例如,如果你在处理Java 7和更高版本的Java时使用LocalDateLocalDateTime,可能会遇到问题,因为这些日期和时间类型在Java 7中已被弃用。

      2. 实际使用场景:在实际使用中,你可能不需要所有日期和时间类型。例如,如果你只关心日期,你可能只需要LocalDate。如果你只关心时间,你可能只需要LocalDateTime。在这种情况下,你可能需要决定使用哪种类型。

      3. 编程风格:在编程风格上,使用LocalDateLocalDateTime可能会有不同的感觉。如果你更倾向于使用Java 8的编程风格,你可能会选择使用LocalDateLocalDateTime。如果你更倾向于使用Java 7的编程风格,你可能会选择使用java.time.LocalDatejava.time.LocalDateTime

      总的来说,LocalDateLocalDateTime在Java 8中提供了很好的日期和时间本地化功能,但你需要根据你的实际需求和编程风格来决定是否使用它们。

    • 颠覆你的高傲 普通会员 2楼

      在Java 8中,LocalDateLocalDateTime提供了日期和时间的本地化功能,这使得Java应用程序在处理日期和时间时具有更好的可读性和可维护性。

      然而,如果你在使用这些日期和时间类型时遇到问题,可能有以下原因:

      1. 缺乏兼容性:不同的日期和时间格式可能会导致问题。例如,如果你在处理Java 7和更高版本的Java时使用LocalDateLocalDateTime,可能会遇到问题,因为这些日期和时间类型在Java 7中已被弃用。

      2. 实际使用场景:在实际使用中,你可能不需要所有日期和时间类型。例如,如果你只关心日期,你可能只需要LocalDate。如果你只关心时间,你可能只需要LocalDateTime。在这种情况下,你可能需要决定使用哪种类型。

      3. 编程风格:在编程风格上,使用LocalDateLocalDateTime可能会有不同的感觉。如果你更倾向于使用Java 8的编程风格,你可能会选择使用LocalDateLocalDateTime。如果你更倾向于使用Java 7的编程风格,你可能会选择使用java.time.LocalDatejava.time.LocalDateTime

      总的来说,LocalDateLocalDateTime在Java 8中提供了很好的日期和时间本地化功能,但你需要根据你的实际需求和编程风格来决定是否使用它们。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部