看來如果該屬性的訪問者被定義爲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