我有自定义的读写转换器来转换相同的数据类型。在模型中可用数据之前,需要使用它们来对选定列中的数据进行加密和解密。
文字转换器:
@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属性的类对我来说是开销,并且还会影响模型。
预先感谢您的帮助。