2017-03-01 1 views
0

Je tente d'utiliser la fonctionnalité de sérialisation Jackson de spring-data-redis. Je construis un ObjectMapper et en utilisant le GenericJackson2JsonRedisSerializer comme sérialiseur pour le redisTemplate:spring-data-redis Jackson sérialisation



    @Configuration 
    public class SampleModule { 
     @Bean 
     public ObjectMapper objectMapper() { 
      return Jackson2ObjectMapperBuilder.json() 
        .serializationInclusion(JsonInclude.Include.NON_NULL) // Don’t include null values 
        .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) //ISODate 
        .build(); 
     } 

     @Bean 
     public RedisTemplate getRedisTemplate(ObjectMapper objectMapper, RedisConnectionFactory redisConnectionFactory){ 
      RedisTemplate redisTemplate = new RedisTemplate(); 
      redisTemplate.setDefaultSerializer(new GenericJackson2JsonRedisSerializer(objectMapper)); 
      redisTemplate.setConnectionFactory(redisConnectionFactory); 
      return redisTemplate; 
     } 
    } 

J'ai un SampleBean je tente de sauver:



    @RedisHash("sampleBean") 
    public class SampleBean { 
     @Id 
     String id; 
     String value; 
     Date date; 

     public SampleBean(String value, Date date) { 
      this.value = value; 
      this.date = date; 
     } 
    } 

Et un dépôt pour le grain de café:



    public interface SampleBeanRepository extends CrudRepository { 
    } 

Je suis alors en train d'écrire la fève à Redis:



    ConfigurableApplicationContext context = SpringApplication.run(SampleRedisApplication.class, args); 

    SampleBean helloSampleBean = new SampleBean("hello", new Date()); 
    ObjectMapper objectMapper = context.getBean(ObjectMapper.class); 
    logger.info("Expecting date to be written as: " + objectMapper.writeValueAsString(helloSampleBean.date)); 

    SampleBeanRepository repository = context.getBean(SampleBeanRepository.class); 
    repository.save(helloSampleBean); 

    context.close(); 

Je m'attends à ce que redisTemplate utilise le sérialiseur pour écrire la date dans le SampleBean en tant qu'horodatage, mais il est écrit comme long.

Le pertinent référence ressort données Redis: http://docs.spring.io/spring-data/data-redis/docs/current/reference/html/#redis:serializer exemple de code complet: https://github.com/bandyguy/spring-redis-jackson-sample-broken

Répondre

0

Le sérialiseur/mapper utilisée par le modèle ne modifie pas celle utilisée par le référentiel depuis le référentiel opère directement sur le byte[] en utilisant Converter implémentations pour lire/écrire des données sur la base de métadonnées de type domaine.

Veuillez vous reporter à la section Object to Hash Mapping du manuel de référence pour savoir comment écrire et enregistrer un Converter personnalisé.