redis - spring-boot RedisTemplate<String,User> 异常

标签 redis spring-boot spring-data-redis

我的代码是这样的:

Java:

@Autowired
private RedisTemplate<String,User> myTemplate;

@Override
public String login(String email, String password) {
    User user = this.userRepository.findByEmailAndPassword(email, password);

    System.out.println(user);

    if (user == null)  return null;

    String key1 = "lic" + "$" + user.getId() + "$" + user.getRole() + "$" + user.getName() + "$" + user.getEmail();

    ValueOperations<String, User> ops = this.myTemplate.opsForValue();

    if (!this.myTemplate.hasKey(key1)) {
        ops.set(key1, user);
    }
    return key1;
}

当应用程序运行时,注入(inject)bean,如下所示:

@SpringBootApplication
public class ApplicationApp extends WebMvcConfigurerAdapter {


//    @Autowired
//    private RedisTemplate<String,String> template;

@Bean
JedisConnectionFactory jedisConnectionFactory() {
    return new JedisConnectionFactory();
}

@Bean
RedisTemplate<String, User> redisTemplate() {
    final RedisTemplate<String, User> template = new RedisTemplate<String, User>();
    template.setConnectionFactory(jedisConnectionFactory());
    template.setKeySerializer(new StringRedisSerializer());
    template.setHashValueSerializer(new GenericToStringSerializer<User>(User.class));
    template.setValueSerializer(new GenericToStringSerializer<User>(User.class));
    return template;
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
    // super.addInterceptors(registry);
    registry.addInterceptor(new AuthorAccess()).addPathPatterns("/api/sc/**");
}

public static void main(String[] args) throws Exception {
    SpringApplication.run(ApplicationApp.class, args);
}
}

然后,调用登录服务发现错误如下:

org.springframework.core.convert.ConverterNotFoundException:找不到能够从 com.qycloud.oatos.license.domain.User 类型转换为 java.lang.String 类型的转换器

最佳答案

使用 Jackson2JsonRedisSerializer 而不是 GenericToStringSerializer 设置 ValueSerializer ,它应该可以工作。 GenericToStringSerializer 不支持对象到字符串的转换。

template.setValueSerializer(new Jackson2JsonRedisSerializer<User>(User.class));

关于redis - spring-boot RedisTemplate<String,User> 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28335243/

相关文章:

redis - Redis 数据库的 Hazelcast 替代品

asp.net-web-api - Ninject方法注入(inject)Redis

java.lang.IllegalStateException : Cannot load configuration class: com. javainuse.SpringBootHelloWorldApplication

java - spring-data-redis:在一个事务中,get操作会返回null

java - 如何使用 Spring 缓存管理器与 redis 1.6.2.RELEASE

python - Celery/Redis : redis. 异常。ResponseError: 'set' 命令的参数数量错误

redis - 使用 Redis 的速率限制?

java - 防止跨多个服务器重复 POST API 调用

spring-boot - 在 Spring REST 文档中包含 "try out"表单

java - 为什么 Redis 不在 __keyevent@*__ :expired topic events? 上调用我的 MessageListener