Пользовательский преобразователь Dozer — передача всего объекта в виде поля «A»

Я хотел бы отобразить CustomConverter в dozer, но я хотел бы передать весь текущий объект в качестве источника. Все примеры в документации по Dozer CustomConverter передают в качестве источника поле входного объекта, а не весь объект.

Я хотел бы сделать что-то вроде этого:

<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 здесь: http://dozer.sourceforge.net/documentation/customconverter.html


person lance-java    schedule 10.12.2013    source источник


Ответы (2)


Попробуйте реализовать CustomConverter вместо DozerConverter и попробуйте передать его как:

<field custom-converter="my.custom.converter">
    <a>this</a>
    <b>myfield</b>
</field>
person Prasann    schedule 24.08.2016

Если вы используете сопоставление полей, вы хотите идентифицировать атрибут с помощью «ключа»:

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

Затем вы можете приступить к реализации преобразователя. Вам будет предоставлен объект, содержащий поле «имя переменной» в качестве источника. Если, например, у вас нет установщика для значения списка (как у меня по какой-то причине...), теперь вы можете манипулировать исходным объектом так, как вам нужно.

person fl0w    schedule 21.11.2017