我有一个推土机映射,通过参数通过自定义转换器返回用户。这应该工作,但现在这个用户应该转换为官方。
我尝试通过让转换器返回用户并制作另一个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;
}
}
答案 0 :(得分:0)
根据您的自定义转换器,您似乎正在从String
映射到User
,现在而不是User
,您需要一个Offical
的对象。对?并且您希望使用dozer自动执行此User
到Offical
转换。对?如果是,那么您需要使用mapper.map()
方法在自定义转换器本身中调用新的推土机。您当前的用例不会自动调用它。