2013-12-10 28 views
1

我想將自定義轉換器映射到推土機上,但我想將整個當前對象作爲源進行傳遞。推土機CustomConverter文檔中的所有示例都將輸入對象的字段作爲源而不是整個對象。推土機自定義轉換器 - 將整個對象作爲字段'A'傳遞

我想要做這樣的事情:

<mapping> 
    <class-a>foo.bar.InputObject</class-a> 
    <class-b>foo.bar.OutputObject</class-b>  
    <field custom-converter="foo.bar.MyConverter"> 
     <a>this</a> <!-- how do I access the whole value and not just a field? --> 
     <b>custom</b> 
    </field> 
    <field> 
     <a>anotherField</a> 
     <b>anotherField</b> 
    </field> 
</mapping> 

而且

public class MyConverter extends DozerConverter<InputObject, String> { 
    ... 
    public String convertTo(InputObject input, String custom) { 
     // do some transformation 
    } 
} 

CustomConverter文檔瀏覽: ​​

+1

[How to pass \'this \'to Dozer field mapping?](http://stackoverflow.com/questions/9656606/how-to-pass-this-to-dozer-field-mapping) –

+0

@ lance-java你有什麼進展嗎? –

+0

我決定徹底刪除Dozer並使用POJO java類作爲變形金剛。最初的推土機聽起來像一個好主意,但它結束了很多xml和許多自定義轉換器,每個轉換器都有幾行java代碼和大量樣板xml。現在我刪除了Dozer,代碼更加清晰。 –

回答

0

嘗試實施CustomConverter代替DozerConverter,並嘗試將其傳遞如:

<field custom-converter="my.custom.converter"> 
    <a>this</a> 
    <b>myfield</b> 
</field> 
0

如果您使用的字段映射要通過使用「鑰匙」,以確定該屬性:

<field custom-converter="de.xyz.custom.MyConverter"> 
    <a key="variablename">this</a> 
    <b>targetvariablename</b> 
</field> 

然後可以繼續實施該轉換器。您將獲得包含「variablename」字段的對象作爲源。例如,如果您沒有列表值的setter(比如我出於任何原因......),您現在可以按照需要的方式操作源對象。

相關問題