openai-java icon indicating copy to clipboard operation
openai-java copied to clipboard

RedisTemplate: java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [com.theokanning.openai.completion.chat.ChatMessage]

Open jiangying000 opened this issue 2 years ago • 2 comments

code sample

@Autowired
RedisTemplate<String, ChatMessage> redisTemplate;
String chatId = "123";
var chatMessage = new ChatMessage();
redisTemplate.opsForList().rightPush(chatId, chatMessage); // throws java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [com.theokanning.openai.completion.chat.ChatMessage]

Any idea how to fix ?

jiangying000 avatar Mar 08 '23 02:03 jiangying000

add Bean like would fix this:

    @Bean
    RedisTemplate<String, ?> redisTemplate(RedisConnectionFactory connectionFactory) {
        log.debug("---init redisTemplate bean---");

        RedisTemplate<String, ?> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(connectionFactory);

        GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();

        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);

        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

jiangying000 avatar Mar 08 '23 05:03 jiangying000

I might be oversimplifying/misunderstanding, but can you just do a .toString() on the object? Worst case you can do a g.toJson(obj)

cryptoapebot avatar Mar 08 '23 14:03 cryptoapebot

Have a similar issue my code for service @Cacheable(value = "accounts") public Mono<ApiResponse> getAllAccounts(){ Flux<Account> accountFlux = accountRepository.findAll(); return accountFlux.collectList().flatMap(res-> Mono.just(ApiResponse.responseFormatter(UUID.randomUUID().toString(),200,"Success","Data fetched successfully",res)));}

Code for redisTemplate @Bean public RedisTemplate<String, Object> redisTemplate(){ RedisTemplate<String,Object> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory()); template.setKeySerializer(new JdkSerializationRedisSerializer()); template.setValueSerializer(new GenericToStringSerializer<>(ApiResponse.class)); return template; }

The error i am getting Caused by: java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [reactor.core.publisher.MonoFlatMap] at org.springframework.core.serializer.DefaultSerializer.serialize(DefaultSerializer.java:43) at org.springframework.core.serializer.Serializer.serializeToByteArray(Serializer.java:56) at org.springframework.core.serializer.support.SerializingConverter.convert(SerializingConverter.java:60)

franciskinyuru avatar Apr 19 '23 08:04 franciskinyuru