看来如果该属性的访问者被定义为isProperty()
而不是getProperty()
,Dozer将不会映射布尔属性。dozer布尔属性映射
以下Groovy脚本说明了这个问题:
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生成的(它产生一个“is”存取器,而不是一个“获取”布尔值的存取器),所以我不能重命名存取器。我正在使用Dozer 5.3.2。
是否使用JAXB来通过任何机会生成你的DTO? – artbristol 2011-04-27 10:49:05
是的,我有,有什么办法可以让它产生访问? – 2011-04-27 10:59:33
注意,当'is'方法的类型为'Boolean'时,Dozer只有这种方式 - 它将'boolean isFoo()'方法映射为罚款。 – 2012-04-06 15:20:05