Похоже, что 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.