Spring Data Redis - UUID id - ConverterNotFoundException [英] Spring Data Redis - UUID id - ConverterNotFoundException
问题描述
我想使用 UUID 键将我的实体存储在 Redis 中:
I would like to store my entities in Redis with a UUID key:
@RedisHash("order")
public class Order {
@Id
private UUID id;
...
}
但是,此设置出现以下异常:
However, I get the following exception with this setup:
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.util.UUID] to type [byte[]]
at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:321) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:194) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:174) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.data.redis.core.convert.MappingRedisConverter.toBytes(MappingRedisConverter.java:948) ~[spring-data-redis-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.data.redis.core.convert.MappingRedisConverter.lambda$writeInternal$2(MappingRedisConverter.java:592) ~[spring-data-redis-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:328) ~[spring-data-commons-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.data.redis.core.convert.MappingRedisConverter.writeInternal(MappingRedisConverter.java:584) ~[spring-data-redis-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.data.redis.core.convert.MappingRedisConverter.write(MappingRedisConverter.java:396) ~[spring-data-redis-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.data.redis.core.convert.MappingRedisConverter.write(MappingRedisConverter.java:122) ~[spring-data-redis-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.data.redis.core.RedisKeyValueAdapter.put(RedisKeyValueAdapter.java:208) ~[spring-data-redis-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.data.keyvalue.core.KeyValueTemplate.lambda$update$1(KeyValueTemplate.java:204) ~[spring-data-keyvalue-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.data.keyvalue.core.KeyValueTemplate.execute(KeyValueTemplate.java:343) ~[spring-data-keyvalue-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.data.keyvalue.core.KeyValueTemplate.update(KeyValueTemplate.java:204) ~[spring-data-keyvalue-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.data.keyvalue.repository.support.SimpleKeyValueRepository.save(SimpleKeyValueRepository.java:103) ~[spring-data-keyvalue-2.0.6.RELEASE.jar:2.0.6.RELEASE]
...
当使用 String 而不是 UUID 时,不会出现此类异常.
When using String instead of UUID, no such exception appears.
如何使用 UUID 作为 ID 类型?
How can I use UUID as ID type?
推荐答案
更准确地说,您必须在您的上下文中注册一个名为 redisCustomConversions 的 CustomConversion bean.请参阅此帖子:Redis - 如何配置自定义转换
To be more precise you have to register a CustomConversion bean in your context with the name redisCustomConversions. See this post: Redis - How to configure custom conversions
所以在你的情况下它会像
So in your case it would be something like
@Bean
public CustomConversion redisCustomConversions(){
return new CustomConversions(
Arrays.asList(new UUIDToStringConverter(), new StringToUUIDConverter()))))
}
原文:
我认为解决这个问题的最简单方法是为 uuid 编写一个类型转换器.像一个
I think the easiest way to fix this is to write a type converter for uuid. Something like a
class UUIDConverter 实现 Converter
或在需要时
class UUIDConverter 实现 Converter
您必须在您的上下文中将其注册为 bean.
You have to register this as a bean in your context.
这篇关于Spring Data Redis - UUID id - ConverterNotFoundException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!