Spring Data Redis с конвертерами JSON дает "Путь к свойству не должен быть пустым или пустым".
Я пытаюсь использовать CrudRepository в сочетании с spring-data-redis и салатом. Следуя всем советам, которые я могу найти, я настроил свое приложение spring-boot 2.1.8 с помощью @ReadingConverters и @WritingConverters, но когда я пытаюсь использовать репозиторий, я получаю "Путь к свойству не должен быть пустым или пустым".
Выполняя некоторую отладку, похоже, что это вызвано org.springframework.data.redis.core.convert.MappingRedisConverter:393
writeInternal(entity.getKeySpace(), "", source, entity.getTypeInformation(), sink);
Второй параметр - это путь. Это заканчивается на строке 747 изMappingRedisConverter
запуск этого кода:
} else if (targetType.filter(it -> ClassUtils.isAssignable(byte[].class, it)).isPresent()) {
sink.getBucket().put(path, toBytes(value));
}
В конечном итоге путь с пустым путем попадает в org.springframework.data.redis.core.convert.Bucket:77
и терпит неудачу Assert.hasText(path, "Path to property must not be null or empty.");
даже если данные были сериализованы.
Это ошибка spring-data-redis или мне нужно настроить что-то еще?
RedicsConfig.java
@Configuration
@EnableConfigurationProperties({RedisProperties.class})
@RequiredArgsConstructor
@EnableRedisRepositories
public class RedisConfiguration {
private final RedisConnectionFactory redisConnectionFactory;
@Bean
public RedisTemplate<?, ?> redisTemplate() {
RedisTemplate<byte[], byte[]> template = new RedisTemplate<byte[], byte[]>();
template.setConnectionFactory(redisConnectionFactory);
template.afterPropertiesSet();
return template;
}
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.findAndRegisterModules();
return objectMapper;
}
@Bean
public RedisCustomConversions redisCustomConversions(List<Converter<?,?>> converters) {
return new RedisCustomConversions(converters);
}
}
Я только что включил сюда один преобразователь записи, но у меня есть несколько преобразователей чтения и записи...
@Component
@WritingConverter
@RequiredArgsConstructor
@Slf4j
public class CategoryWritingConverter implements Converter<Category, byte[]> {
private final ObjectMapper objectMapper;
@Setter
private Jackson2JsonRedisSerializer<Category> serializer;
@Override
public byte[] convert(Category category) {
return getSerializer().serialize(category);
}
private Jackson2JsonRedisSerializer<Category> getSerializer() {
if (serializer == null) {
serializer = new Jackson2JsonRedisSerializer<>(Category.class);
serializer.setObjectMapper(objectMapper);
}
return serializer;
}
}
Объект для записи:
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@AllArgsConstructor
@NoArgsConstructor
@RedisHash("category")
@TypeAlias("category")
public class Category {
@Id
@EqualsAndHashCode.Include
private String categoryCode;
private String categoryText;
}
И репо:
public interface CategoryRepository extends CrudRepository<Category, String> {
Page<Category> findAll(Pageable pageable);
}
Может ли кто-нибудь посоветовать, что я пропустил, или если это ошибка, которую я должен поднять в spring-data-redis?