dozer布尔属性映射

Dón*_*nal 11 java groovy dozer

如果该属性的访问者被定义为isProperty()而不是,则Dozer似乎不会映射布尔属性getProperty().

以下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
Run Code Online (Sandbox Code Playgroud)

最后一行的断言失败了.不过,如果我重新命名ProductDto.isFoo(),以ProductDto.getFoo()它传递.

是否有我可以在Dozer映射文件中设置的标志/选项,它将指示它使用布尔属性的访问器isget访问器?或者,我可以为每个布尔属性添加自定义规则,但这不是很吸引人.

虽然上面的例子是用Groovy编写的,但我没有理由相信相同的Java代码不会表现出同样的行为.

这些DTO由JAXB生成(它生成"is"访问器,而不是booleans的"get"访问器),因此我无法重命名访问器.我正在使用Dozer 5.3.2.

Pri*_*shi 9

可能是您可以使用自定义getter方法来使用它.

这里是示例映射(在dozer-mapping文件中写入)

<mapping>
  <class-a>ProductDto</class-a>
  <class-b>ProductCommand</class-b>
<field>
  <a get-method="isFoo">foo</a>
  <b>foo</b>
</field>
</mapping>
Run Code Online (Sandbox Code Playgroud)

所以现在dozer将使用isFoo而不是预定义的getFoo.希望这对你有用.:)


Jör*_*ann 7

为布尔包装类生成"i​​s"方法是JAXB中的错误,有关详细信息,请参阅Java Bean,BeanUtils和布尔包装类以及http://java.net/jira/browse/JAXB-131.似乎在jaxb 2.1.13中修复