Dozer Булево отображение свойств

Похоже, что Dozer не будет отображать логическое свойство, если аксессор этого свойства определяется как isProperty(), а не getProperty().

Следующий groovy script иллюстрирует проблему:

import org.dozer.*

class ProductCommand {
    Boolean foo 
}

public class ProductDto  {

    private Boolean foo;        

    public Boolean isFoo() { this.foo }    
    public void setFoo(Boolean p0) { this.foo = p0 }           
}

def mapper =  new DozerBeanMapper()

dto = new ProductDto(foo: true)
assert dto.isFoo()

ProductCommand mappedCmd = mapper.map(dto, ProductCommand)
assert mappedCmd.foo

Утверждение об окончательной строке не выполняется. Однако, если я переименую ProductDto.isFoo() в ProductDto.getFoo(), он пройдет.

Есть ли флаг/параметр, который я могу установить в файле сопоставления Dozer, который будет инструктировать его использовать либо аксессуар is, либо get для булевых свойств? В качестве альтернативы я мог бы добавить настраиваемое правило для каждого логического свойства, но это не очень привлекательно.

Хотя приведенный выше пример написан в Groovy, у меня нет оснований полагать, что такое же поведение не будет отображаться эквивалентным Java-кодом.

Эти DTO генерируются JAXB (который генерирует "access", а не "get" accessor for booleans), поэтому я не могу переименовать аксессоров. Я использую Dozer 5.3.2.

Ответ 1

Может быть, вы можете использовать пользовательский метод getter для его использования.

здесь s пример сопоставления (записать его в файл отображения дюз)

<mapping>
  <class-a>ProductDto</class-a>
  <class-b>ProductCommand</class-b>
<field>
  <a get-method="isFoo">foo</a>
  <b>foo</b>
</field>
</mapping>

Итак, теперь dozer будет использовать isFoo вместо предопределенного getFoo. Надеюсь, что это работает для вас.:)

Ответ 4

Существует также другой способ достижения правильного отображения бульдозера (самый чистый, на мой взгляд):

<mapping>
    <class-a>ProductDto</class-a>
    <class-b>ProductCommand</class-b>
    <field>
       <a is-accessible="true">foo</a>
       <b is-accessible="true">foo</b>
    </field>
</mapping>

ИЛИ как уже упоминалось ранее:

<mapping>
    <class-a>ProductDto</class-a>
    <class-b>ProductCommand</class-b>
    <field>
       <a get-method="isFoo">foo</a>
       <b>foo</b>
    </field>
</mapping>