Skip to content

Custom HashValueSerializer for RedisTemplate in redis stream happend ConversionFailedException! #2391

Open
@sccassiel

Description

@sccassiel

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.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions