Я пытаюсь преобразовать / сериализовать поле @Id (которое не является строкой) класса модели, но продолжаю получать эту ошибку.Пользовательский класс ID просто объединяет два значения с двоеточием, например aaaa:2345
.
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [MyIdClass] to type [byte[]]
Это мой класс модели.
@RedisHash("alert")
public class MyClass implements Serializable
{
public static class MyIdClass
{
public String userId;
public Long sessionExpiry;
public MyIdClass()
{
}
public MyIdClass(String id, Long ex)
{
userId = id;
sessionExpiry = ex;
}
}
public static class MyIdClassSerializer implements RedisSerializer<MyIdClass>
{
@Nullable
@Override
public byte[] serialize(@Nullable MyIdClass uid) throws SerializationException
{
return String.format("%s:%d", uid.userId, uid.sessionExpiry).getBytes();
}
@Nullable
@Override
public MyIdClass deserialize(@Nullable byte[] bytes) throws SerializationException
{
String[] t = new String(bytes).split(":");
return new MyIdClass(t[0], Long.parseLong(t[1]));
}
}
@Component
@ReadingConverter
public static class MyIdClassReader implements Converter<byte[], MyIdClass>
{
@Nullable
@Override
public MyIdClass convert(byte[] source)
{
String[] t = new String(source).split(":");
return new MyIdClass(t[0], Long.parseLong(t[1]));
}
}
@Component
@WritingConverter
public static class MyIdClassWriter implements Converter<MyIdClass, byte[]>
{
@Nullable
@Override
public byte[] convert(MyIdClass uid)
{
return String.format("%s:%d", uid.userId, uid.sessionExpiry).getBytes();
}
}
/**
* User ID
* Key := 'alert:' userId ':' sessionExpiry
*/
@Id
public MyIdClass id;
public String value;
}
Вот как я настраиваю RedisTemplate.
@Bean("redisTemplateActivityAlert")
public RedisTemplate<ActivityAlert.UserIdExpiry, ActivityAlert> redisTemplateActivityAlert()
{
RedisTemplate<ActivityAlert.UserIdExpiry, ActivityAlert> template = new RedisTemplate<>();
template.setConnectionFactory(jedisConnectionFactory());
template.setKeySerializer(new ActivityAlert.UserIdExpirySerializer());
template.setHashKeySerializer(new ActivityAlert.UserIdExpirySerializer());
return template;
}
Я читал другие посты о настройке ConversionService
или TypeConverter
, но не зашел с ними далеко.