Dozer - вызывать маппер после конвертера

1

У меня есть отображение дозатора, которое возвращает Пользователь через пользовательский конвертер по параметру. Это работает так, как должно, но теперь этот Пользователь должен быть преобразован в Официального.

Я попытался сделать это, разрешив конвертеру вернуть пользователя и сделать еще один файл dzer xml, чтобы преобразовать пользователя в Официального. Я добавил этот xml файл в dozerfactory, но он, похоже, не вызван.

Я получаю: "Exepected Official, actual: User". Как я могу запустить файл 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;
}

}

Теги:
dozer

1 ответ

0
Лучший ответ

В соответствии с вашим обычным преобразователем кажется, что вы используете сопоставление от String to User а теперь вместо User вы хотите объект Offical. Правильно? и вы хотите автоматизировать преобразование этого User в Offical с помощью бульдозера. Правильно? Если да, то вам нужно вызвать новый dozer в собственном конвертере, используя mapper.map(). Ваш текущий прецедент не будет автоматически вызывать его.

  • 0
    Просто получил ту же идею, и она работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню