为什么不执行Spring Data Cassandra定制读取转换器来执行相同类型的转换,而写入转换器要执行?

时间:2019-03-22 21:17:11

标签: spring-data-cassandra

我有自定义的读写转换器来转换相同的数据类型。在模型中可用数据之前,需要使用它们来对选定列中的数据进行加密和解密。

文字转换器:

@WritingConverter
public class Encrypt implements Converter<String, String>, ConditionalConverter {

    @Override
    public String convert(String arg0) {
        return arg0; 
    }

阅读转换器:

@ReadingConverter
public class Decrypt implements Converter<String, String>, ConditionalConverter {

    @Override
    public String convert(String arg0) {            
        return arg0;
    }

问题在于读取转换器的方法 convert 并未执行,而写入转换器的方法则执行了,因此操作上有些不一致。

我已经检查了源代码类 MappingCassandraConverter ,看起来像用于读取转换器,对于相同类型,不允许进行转换:

@SuppressWarnings({ "rawtypes", "unchecked" })
private Object getPotentiallyConvertedSimpleRead(Object value, Class<?> target) {

        if (value == null || target == null || target.isAssignableFrom(value.getClass())) {
            return value;
        }

        if (conversions.hasCustomReadTarget(value.getClass(), target)) {
            return conversionService.convert(value, target);
        }

但用于编写转换的是:

@SuppressWarnings("unchecked")
private Object getWriteValue(Object value, TypeInformation<?> typeInformation) {

        if (value == null) {
            return null;
        }

        Class<?> requestedTargetType = typeInformation != null ? typeInformation.getType() : Object.class;

        if (getCustomConversions().hasCustomWriteTarget(value.getClass(), requestedTargetType)) {

我的问题是,这是设计使然还是被忽略了,读写转换器是否已由其他开发人员实现? 如果有人能解释它,我将不胜感激。

我当然可以使用自定义数据类型解决该问题,但是创建具有一个String属性的类对我来说是开销,并且还会影响模型。

预先感谢您的帮助。

0 个答案:

没有答案