[英]Dozer deep mapping field as String
我的對象太復雜了。
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中,而是讀取了Survey對象上的questionAnswerGroup字段,然后遍歷questionAnswerSets中的每一項並將其替換為自己的字符串版本。 QuestionAnswerSet上toString方法中的斷點表明Dozer在其過程中正在調用該斷點。
我在這里陷入困境,迫使Dozer只接受Survey對象而不更改它。
我發現這樣做的唯一方法是copy-by-reference
設置為true。
您尚未發布OrderItemQuestionAnswer
類,但是我假設它如下:
public class OrderItemQuestionAnswer {
private String question;
private String answer;
// Getters/setters and toString omitted
}
我還假設OrderItemDTO.makeFlatSurvey
看起來像這樣:
public void makeFlatSurvey(Survey survey)
{
for (List<QuestionAnswerSet> questionAnswerSets : survey.getQuestionAnswerGroup().getQuestionAnswerSets().values())
{
for (QuestionAnswerSet questionAnswerSet : questionAnswerSets)
{
OrderItemQuestionAnswer orderItemQuestionAnswer = new OrderItemQuestionAnswer();
orderItemQuestionAnswer.setQuestion(questionAnswerSet.getQuestion());
orderItemQuestionAnswer.setAnswer(questionAnswerSet.getAnswer());
this.survey.add(orderItemQuestionAnswer);
}
}
}
在映射中修改field
元素並添加copy-by-reference="true"
將防止ClassCastException(我不知道為什么):
<mapping wildcard="false">
<class-a>OrderItem</class-a>
<class-b>OrderItemDTO</class-b>
<field copy-by-reference="true">
<a get-method="getSurvey" is-accessible="false">survey</a>
<b set-method="makeFlatSurvey" get-method="makeDomainSurvey" is-accessible="false">survey</b>
</field>
...
</mapping>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.