2

我的代码是这样的:

爪哇:

@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;
}

当应用程序运行时,注入 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 的转换器

4

2 回答 2

4

使用 Jackson2JsonRedisSerializer 而不是 GenericToStringSerializer 设置 ValueSerializer ,它应该可以工作。GenericToStringSerializer 不支持 Object 到 String 的转换。

template.setValueSerializer(new Jackson2JsonRedisSerializer<User>(User.class));
于 2015-04-17T14:32:10.623 回答
0

您需要注册您自己的实现TypeConverterConversionService能够User.class通过例如处理。setTypeConverter(TypeConverter converter). 否则GenericToStringSerializer只会尝试使用DefaultConversionServicewhich 不知道您的类型。

于 2015-02-13T14:05:58.100 回答