11

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

最后一行的断言失败。但是,如果我重命名ProductDto.isFoo()ProductDto.getFoo()就会通过。

我可以在推土机映射文件中设置一个标志/选项来指示它对布尔属性使用 anis或访问器吗?get或者,我可以为每个布尔属性添加自定义规则,但这不是很吸引人。

尽管上面的示例是用 Groovy 编写的,但我没有理由相信等效的 Java 代码不会表现出相同的行为。

这些 DTO 由 JAXB 生成(它生成一个“is”访问器,而不是布尔值的“get”访问器),所以我不能重命名访问器。我正在使用推土机 5.3.2。

4

4 回答 4

10

也许您可以使用自定义 getter 方法来使用它。

这是示例映射(将其写入推土机映射文件)

<mapping>
  <class-a>ProductDto</class-a>
  <class-b>ProductCommand</class-b>
<field>
  <a get-method="isFoo">foo</a>
  <b>foo</b>
</field>
</mapping>

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

于 2012-05-25T14:33:41.737 回答
7

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

于 2011-04-27T11:57:53.017 回答
3

这是 JAXB 中的一个错误,small-bboolean应该有isFoo(). 您可以在更高版本的 JAXB 中使用 -enableIntrospection 选项,或者使用老式的布尔 getter xjc 插件http://fisheye5.cenqua.com/browse/~raw,r=MAIN/jaxb2-commons/www/boolean-getter /index.html

于 2011-04-27T12:07:21.237 回答
0

还有另一种实现正确推土机映射的方法(我认为最干净):

<mapping>
    <class-a>ProductDto</class-a>
    <class-b>ProductCommand</class-b>
    <field>
       <a is-accessible=”true”&gt;foo</a>
       <b is-accessible=”true”&gt;foo</b>
    </field>
</mapping>

或者前面已经提到的方式:

<mapping>
    <class-a>ProductDto</class-a>
    <class-b>ProductCommand</class-b>
    <field>
       <a get-method=”isFoo”&gt;foo</a>
       <b>foo</b>
    </field>
</mapping>
于 2013-06-05T09:02:16.703 回答