【发布时间】:2011-04-27 10:44:17
【问题描述】:
如果布尔属性的访问器定义为isProperty() 而不是getProperty(),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(),它就会通过。
我可以在推土机映射文件中设置一个标志/选项,指示它使用is 或get 访问器来获取布尔属性吗?或者,我可以为每个布尔属性添加自定义规则,但这不是很吸引人。
虽然上面的示例是用 Groovy 编写的,但我没有理由相信等效的 Java 代码不会表现出相同的行为。
这些 DTO 是由 JAXB 生成的(它生成一个“is”访问器,而不是布尔值的“get”访问器),所以我不能重命名访问器。我正在使用推土机 5.3.2。
【问题讨论】:
-
您是否正在使用 JAXB 来生成您的 DTO?
-
是的,有什么方法可以让它生成获取访问器?
-
请注意,Dozer 只有在
is方法的类型为Boolean时才会这样做 - 它可以很好地映射boolean isFoo()方法。