ссылка на другое поле в конвертере настраиваемых полей dozer

У меня есть 2 класса с этой структурой:

class ClassA {
  String typeA;
  List<String> valuesA;
  ... other fields go here
}

class ClassB {
  String typeB;
  List<String> valuesB;
  ... other fields go here
}

Мне нужно сопоставить значения A со значениями B, а в пользовательском обложке для этого сопоставления полей мне нужно получить доступ к типу A/typeB.

Что-то вроде: если тип A является «типом 1», тогда сопоставьте значения A со значениями B по некоторому алгоритму, а если тип A является «типом 2», то сопоставьте значения A с значениями B с помощью другого алгоритма.

Возможно ли это с Дозером?

Спасибо!


person Dan L.    schedule 26.03.2012    source источник


Ответы (1)


Я думаю, что это возможно с помощью программных (т.е. на Java) пользовательских конвертеров Dozer.

См. документацию, особенно Java-класс TestCustomConverter в качестве примера.

person ndeverge    schedule 26.03.2012
comment
Спасибо за ответ! Однако я не уверен, как это сделать, потому что это означало бы написать собственный преобразователь для всего сопоставления classA, classB. Я мог бы отобразить поле, но это переопределило бы сопоставление бульдозера по умолчанию для других полей. Поэтому я не знаю, как вызвать базовый преобразователь бульдозера из этого пользовательского преобразователя для сопоставления других полей. - person Dan L.; 26.03.2012
comment
Я не думаю, что вы сможете смешивать пользовательские конвертеры и конвертеры XML, потому что в конфигурации Dozer вам нужно будет прописать маппер для определенных классов. Может быть, вы можете решить это с некоторым наследованием? - person ndeverge; 26.03.2012
comment
Спасибо, но я не могу изменить структуру этих классов — они генерируются по определенной схеме, которую я не должен менять. - person Dan L.; 26.03.2012
comment
Так что для меня вам придется написать полный пользовательский конвертер :( - person ndeverge; 26.03.2012
comment
Но все же, значит ли это, что проще с Dozer ее не решить? Обратите внимание, что я работаю внутри контейнера Spring, и я могу внедрить сопоставитель Dozer в пользовательский преобразователь и использовать его для создания сопоставления по умолчанию перед применением алгоритмов. Однако я думаю, что это может привести к бесконечному циклу. Есть ли другой способ решить эту проблему? - person Dan L.; 26.03.2012
comment
Как вы говорите, вы, вероятно, столкнетесь с бесконечным циклом. Но попробовать стоит :) - person ndeverge; 26.03.2012