spring-projects / spring-projects/spring-data-redis

Custom HashValueSerializer for RedisTemplate in redis stream happend ConversionFailedException!

Open
#2,391 4 comments 0 reactions 1 assignee View on GitHub

@mp911de is already working on this.

Since Oct 18, 2022.

for: team-attention status: feedback-provided
Dominant language
Java
Stars
1.9k
Forks
1.3k
PR merge metrics
No merged PRs in 30d

Description

in my configclass,code show as below

@Bean
public GenericJackson2JsonRedisSerializer jsonRedisSerializer(
        Jackson2ObjectMapperBuilder objectMapperBuilder) {
    var objectMapper = objectMapperBuilder.build();
    GenericJackson2JsonRedisSerializer.registerNullValueSerializer(objectMapper, null);
    objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(),
            ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
    return new GenericJackson2JsonRedisSerializer(objectMapper);
}

@Bean
public RedisTemplate<String, Object> redisTemplate(
        RedisConnectionFactory redisConnectionFactory,
        GenericJackson2JsonRedisSerializer jsonRedisSerializer) {
    var template = new RedisTemplate<String, Object>();
    template.setConnectionFactory(redisConnectionFactory);
    template.setKeySerializer(RedisSerializer.string());
    template.setValueSerializer(jsonRedisSerializer);
    template.setHashKeySerializer(RedisSerializer.string());
    template.setHashValueSerializer(jsonRedisSerializer);
    return template;
}



public class ConsumerListener implements StreamListener<String, ObjectRecord<String, ModelMessageBO>> {
    private String group;
    private String topic;
    private RedisTemplate<String, Object> redisTemplate;
    private AbstractModelMessageHandler modelMessageHandler;
    public ModelJobConsumerListener(String topic, String group, RedisTemplate<String, Object> redisTemplate, AbstractModelMessageHandler modelMessageHandler) {
        this.topic = topic;
        this.group = group;
        this.redisTemplate = redisTemplate;
        this.modelMessageHandler = modelMessageHandler;
    }


  @Override
  public void onMessage(ObjectRecord message) {
     Object value=message.getValue();
  }

}

If i use template.setHashValueSerializer(jsonRedisSerializer),an ConversionFailedException occurs.
But i use template.setHashValueSerializer(RedisSerializer.string()) ,it working normally.
Is it a bug🐛?
Thank you.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.