Quantcast
Channel: Active questions tagged redis+java - Stack Overflow
Viewing all articles
Browse latest Browse all 2204

Spring Data Redis: Failed to convert from type [org.springframework.data.redis.connection.stream.StreamRecords$ByteMapBackedRecord] to type

$
0
0

I've been struggling with this exception from Spring Redis Streams when I try to convert a message from the Stream to my entity. I believe it is occurring due to an issue with the Redis Stream's default Deserializer, however not sure how to resolve.

When I send this message to the Redis stream

XADD my-stream * from john to smith type Request

I get this exception from my spring boot service

org.springframework.core.convert.ConversionFailedException: Failed to convert from type [org.springframework.data.redis.connection.stream.StreamRecords$ByteMapBackedRecord] to type [com.example.messaging.Dto.NotificationMessage] for value 'MapBackedRecord{recordId=1639826917707-0, kvMap={[B@55ab97aa=[B@510458ff, [B@5b7e99c1=[B@4141b49e, [B@12840469=[B@6aa14d0}}'; nested exception is java.lang.IllegalArgumentException: Value must not be null!    at org.springframework.data.redis.stream.StreamPollTask.convertRecord(StreamPollTask.java:198) ~[spring-data-redis-2.5.6.jar:2.5.6]    at org.springframework.data.redis.stream.StreamPollTask.deserializeAndEmitRecords(StreamPollTask.java:176) ~[spring-data-redis-2.5.6.jar:2.5.6]    at org.springframework.data.redis.stream.StreamPollTask.doLoop(StreamPollTask.java:148) ~[spring-data-redis-2.5.6.jar:2.5.6]    at org.springframework.data.redis.stream.StreamPollTask.run(StreamPollTask.java:132) ~[spring-data-redis-2.5.6.jar:2.5.6]    at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]Caused by: java.lang.IllegalArgumentException: Value must not be null!    at org.springframework.util.Assert.notNull(Assert.java:201) ~[spring-core-5.3.12.jar:5.3.12]    at org.springframework.data.redis.connection.stream.Record.of(Record.java:81) ~[spring-data-redis-2.5.6.jar:2.5.6]    at org.springframework.data.redis.connection.stream.MapRecord.toObjectRecord(MapRecord.java:147) ~[spring-data-redis-2.5.6.jar:2.5.6]    at org.springframework.data.redis.core.StreamObjectMapper.toObjectRecord(StreamObjectMapper.java:138) ~[spring-data-redis-2.5.6.jar:2.5.6]    at org.springframework.data.redis.core.StreamOperations.map(StreamOperations.java:577) ~[spring-data-redis-2.5.6.jar:2.5.6]    at org.springframework.data.redis.stream.DefaultStreamMessageListenerContainer.lambda$getDeserializer$2(DefaultStreamMessageListenerContainer.java:240) ~[spring-data-redis-2.5.6.jar:2.5.6]    at org.springframework.data.redis.stream.StreamPollTask.convertRecord(StreamPollTask.java:196) ~[spring-data-redis-2.5.6.jar:2.5.6]    ... 4 common frames omitted

Config Class:

@Configurationpublic class RedisConfig {    @Autowired    private StreamListener<String, ObjectRecord<String, NotificationMessage>> streamListener;    @Bean    public Subscription subscription(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {        StreamMessageListenerContainer.StreamMessageListenerContainerOptions<String, ObjectRecord<String, NotificationMessage>> options                = StreamMessageListenerContainer.StreamMessageListenerContainerOptions.builder()                .pollTimeout(Duration.ofMillis(1000))                .targetType(NotificationMessage.class)                .build();        StreamMessageListenerContainer<String, ObjectRecord<String, NotificationMessage>> listenerContainer =                StreamMessageListenerContainer.create(redisConnectionFactory, options);        Subscription subscription = listenerContainer.receive(StreamOffset.latest("my-stream"), streamListener);        listenerContainer.start();        return subscription;    }}

NotificationMessage Dto:

@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic class NotificationMessage {    private String id;    private String from;    private String to;    private String type;}

Viewing all articles
Browse latest Browse all 2204

Trending Articles