1

我正在尝试实现一个有点通用的转换器,它根据给定的注释转换数据。假设我想以任何方式转换这些带注释的字符串。

一切都很好,直到代码到达我的转换器的“匹配”方法。我得到的“sourceType”总是被剥夺了所有有用的信息。有没有人通过这样的设置取得任何成功,或者我错过了什么?

public class TestStringWriteConverter implements ConditionalGenericConverter {

@Override
    public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
        if (sourceType.hasAnnotation(GivenAnnotation.class)) {
            //->never gets executed, because sourceType is being stripped out of it's useful infos
        }

我从这个包 org.springframework.data.mongodb.core.convert 跟踪问题到 MappingMongoConverter

    protected void writeInternal(Object obj, final DBObject dbo, MongoPersistentEntity<?> entity) {
       //...
                if (null != propertyObj) {
                    if (!conversions.isSimpleType(propertyObj.getClass())) {
                        writePropertyInternal(propertyObj, dbo, prop);
                    } else {
                       // I always end up here, which is correct but the whole prop object is being omitted in favor of the getFieldName() property
                        writeSimpleInternal(propertyObj, dbo, prop.getFieldName());
                    }
                }

}

我正在使用的春季版本:

  <spring.version>3.2.5.RELEASE</spring.version>
  <spring.data.version>1.3.2.RELEASE</spring.data.version>

任何帮助深表感谢。

4

1 回答 1

0

我认为您误解了sourceType.hasAnnotation(…)实际返回的内容。顾名思义,它检查注释的类型。所以对于这样的给定类型:

@MyAnnotation
class Foo { }

它会让你找到@MyAnnotation. 但是,您正在撰写有关“带注释的字符串”的文章。我假设您的意思是:

class Bar {

  @MyAnnotation
  String property;
}

这不是类型注释,ConverterAPI 并不打算涵盖这种情况。如果您认为支持此类场景值得提交,请提交JIRA票证。

于 2013-11-13T21:43:19.950 回答