【问题标题】:Spring Data Redis - UUID id - ConverterNotFoundExceptionSpring Data Redis - UUID id - ConverterNotFoundException
【发布时间】:2018-09-26 19:44:30
【问题描述】:

我想使用 UUID 键将我的实体存储在 Redis 中:

@RedisHash("order")
public class Order {

    @Id
    private UUID id;

    ...
}

但是,我在此设置中遇到以下异常:

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时,不会出现此类异常。

如何使用 UUID 作为 ID 类型?

【问题讨论】:

    标签: spring spring-boot redis spring-data uuid


    【解决方案1】:

    编辑:

    更准确地说,您必须在上下文中注册一个名为 redisCustomConversions 的 CustomConversion bean。看到这个帖子:Redis - How to configure custom conversions

    所以在你的情况下,它会是这样的

    @Bean
    public CustomConversion redisCustomConversions(){
        return new CustomConversions(
            Arrays.asList(new UUIDToStringConverter(), new StringToUUIDConverter()))))
    }
    

    原文:

    我认为解决此问题的最简单方法是为 uuid 编写类型转换器。 有点像

    class UUIDConverter implements Converter<UUID, String>

    或在需要时

    class UUIDConverter implements Converter<UUID, byte[]>

    您必须在您的上下文中将其注册为 bean。

    【讨论】:

    • 不幸的是,我注册这个转换器后仍然看到异常。
    • 但是,您的回答使我找到了正确的解决方案:stackoverflow.com/questions/42915576/…。我们需要注册一个 RedisCustomConversions bean。如果您使用此信息更新您的答案,我将接受它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2020-11-07
    • 2016-03-18
    • 1970-01-01
    • 2017-09-22
    • 2020-02-21
    相关资源
    最近更新 更多