2015-02-05 2 views
0

내 코드 같은 예외 : 봄 부팅 RedisTemplate

자바 :

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

앱 실행은 다음과 같이 빈을 주입 : 다음

@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.springfram ework.core.convert.ConverterNotFoundException : 유형 com.qycloud.oatos.license.domain.User에서 유형을 java.lang.String으로 변환 할 수있는 변환기가 없습니다.

+0

시도해보십시오. template.convertAndSend –

답변

0

TypeConverter의 자체 구현을 등록해야합니다. ConversionService은 예를 들어 User.class을 처리 할 수 ​​있습니다. setTypeConverter(TypeConverter converter). 그렇지 않은 경우 GenericToStringSerializer은 유형을 알지 못하는 DefaultConversionService을 사용하려고 시도합니다.

0

GenericToStringSerializer 대신 Jackson2JsonRedisSerializer를 사용하여 ValueSerializer를 설정하면 제대로 작동합니다. GenericToStringSerializer는 Object to String 변환을 지원하지 않습니다.

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