推土机 - 在转换器后调用映射器

时间:2014-03-12 15:40:10

标签: java dozer

我有一个推土机映射,通过参数通过自定义转换器返回用户。这应该工作,但现在这个用户应该转换为官方。

我尝试通过让转换器返回用户并制作另一个dozer xml文件来将用户转换为官方来尝试这样做。我将此xml文件添加到dozerfactory,但似乎没有调用它。

我得到:“被视为官方,实际:用户”。我怎样才能调用userToOfficial.xml文件?

第一个推土机文件:

<mapping>
<class-a>be.someClass</class-a>
<class-b>be.anotherClassWithOfficial</class-b>


<field custom-converter-id="OfficialConverter">
  <a>someString</a>
  <b>official</b>
</field>

尝试添加,但无效:

<b-hint>be.Official</b-hint>

第二个推土机文件(应该在转换器之后调用但不是):

<mapping>
<class-a>be.User</class-a>
<class-b>be.Official</class-b>
<field>
  <a>mail</a>
  <b>email</b>
</field>

转换器:

public class OfficialConverter implements CustomConverter {

/** The ldap local. */
private UserLocal userLocal;

@Override
public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue,
        Class < ? > destinationClass, Class < ? > sourceClass) {
    if (sourceFieldValue == null) {
        return null;
    }
    if (sourceFieldValue instanceof String) {
        User user= userLocal
                .getUserByLogin((String) sourceFieldValue);
        return user;

    }
    return null;
}

public UserLocal getUserLocal() {
    return userLocal;
}


public void setUserLocal(UserLocal userLocal) {
    this.userLocal= userLocal;
}

}

1 个答案:

答案 0 :(得分:0)

根据您的自定义转换器,您似乎正在从String映射到User,现在而不是User,您需要一个Offical的对象。对?并且您希望使用dozer自动执行此UserOffical转换。对?如果是,那么您需要使用mapper.map()方法在自定义转换器本身中调用新的推土机。您当前的用例不会自动调用它。