Parece que Dozer no correlacionará una propiedad booleana si el descriptor de esta propiedad se define como isProperty()
en lugar de getProperty()
.dozer Asignación de propiedad booleana
El siguiente guión maravilloso ilustra el problema:
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
La afirmación sobre la línea final falla. Sin embargo, si cambio el nombre de ProductDto.isFoo()
a ProductDto.getFoo()
, pasa.
¿Existe un indicador/opción que pueda establecer en el archivo de mapeo de Dozer que le indicará que use un descriptor de acceso is
o get
para las propiedades booleanas? Alternativamente, podría agregar una regla personalizada para cada propiedad booleana, pero esto no es muy atractivo.
Aunque el ejemplo anterior está escrito en Groovy, no tengo motivos para creer que el mismo código no mostraría el mismo comportamiento.
Estos DTO son generados por JAXB (que genera un descriptor de acceso "es", en lugar de un "acceso" para booleanos), por lo que no puedo cambiar el nombre de los accesos. Estoy usando Dozer 5.3.2.
¿Está utilizando JAXB a generar tus DTO, por casualidad? – artbristol
sí, ¿hay alguna forma de que pueda generar accesores? –
tenga en cuenta que Dozer solo se comporta de esta manera cuando el método 'is' tiene el tipo' Boolean' - asigna 'boolean isFoo()' métodos finos. –