So verwenden Sie GenericJackson2JsonRedisserializer
Posted: 21 Mar 2025, 10:16
Ich verwende Spring Data Redis, um einige Daten mit @cacheable zu zwischenspeichern. Ich habe mehrere Arten von Objekten, die zwischengespeichert werden müssen, und ich brauche die Daten von Redis, um im JSON -Format zu sein. Ich weiß, dass der verwendete Serializer standardmäßig ist, aber mit den zwischengespeicherten Daten ist nicht menschlich lesbar.
Verwenden Sie diesen Redistemplate und ich erhalte immer diesen Fehler zurück:
Wie ich verstanden habe, kennt Jackson bei der Deserialisierung den Typ des spezifischen Objekts nicht, da es Objekt erstellt und eine LinkedHasMap erstellt, um die Daten zu halten. Vielleicht irre ich mich daran, aber wie kann ich das Speichern der zwischengespeicherten Daten als JSON für mehrere Arten von Objekten mit @cacheble?
Code: Select all
public RedisTemplate redisTemplate (RedisConnectionFactory cf) {
ObjectMapper objectMapper = new Jackson2ObjectMapperBuilder().failOnEmptyBeans(false)
.failOnUnknownProperties(false)
.indentOutput(false)
.serializationInclusion(JsonInclude.Include.NON_NULL)
.modules(
// Optional
new Jdk8Module(),
// Dates/Times
new JavaTimeModule()
)
.featuresToDisable(
SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,
DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS,
SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS
).build();
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(objectMapper);
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(cf);
redisTemplate.setKeySerializer(genericJackson2JsonRedisSerializer);
redisTemplate.setHashKeySerializer(genericJackson2JsonRedisSerializer);
redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
return redisTemplate;
Code: Select all
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to