У меня есть объект, который слишком сложен.
public class OrderItem {
private Survey survey;
...
}
public class Survey {
private QuestionAnswerGroup questionAnswerGroup;
...
}
public class QuestionAnswerGroup {
private Map<String, List<QuestionAnswerSet>> questionAnswerSets;
...
}
Моя цель состоит в том, чтобы сгладить карту questionAnswerSets так, чтобы все списки в значениях были объединены в один как
public class OrderItemDTO {
private List<OrderItemQuestionAnswer> survey;
...
}
Вместо того, чтобы пытаться выяснить, как объединить все эти списки в один в Dozer, что я не уверен, что это вообще может сделать, я написал собственный установщик.
<mapping wildcard="false">
<class-a>OrderItem</class-a>
<class-b>OrderItemDTO</class-b>
<field>
<a get-method="getSurvey" is-accessible="false">survey</a>
<b set-method="makeFlatSurvey" get-method="makeDomainSurvey" is-accessible="false">survey</b>
</field>
...
</mapping>
Что я бы предположилбудет означать, что Dozer просто прочитает Survey с первого объекта и поместит его в makeFlatSurvey, но вместо этого он считывает поле questionAnswerGroup объекта Survey, а затем просматривает каждый элемент questionAnswerSets и заменяет их строковой версией.,Точка останова в методе toString в QuestionAnswerSet показывает, что Dozer вызывает это как часть своего процесса.
Я поставлен в тупик, пытаясь заставить Dozer просто принять объект Survey, не меняя его.