openai-java
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]
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 ?
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;
}
I might be oversimplifying/misunderstanding, but can you just do a .toString() on the object? Worst case you can do a g.toJson(obj)
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)