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()と合格します。

Dozer マッピング ファイルに設定できるフラグ/オプションはありますか?これにより、ブール値プロパティにisまたはgetアクセサーを使用するように指示されますか? 別の方法として、すべてのブール プロパティにカスタム ルールを追加することもできますが、これはあまり魅力的ではありません。

上記の例は Groovy で書かれていますが、同等の Java コードが同じ動作を示さないと信じる理由はありません。

これらの DTO は JAXB (ブール値の「get」アクセサーではなく「is」アクセサーを生成する) によって生成されるため、アクセサーの名前を変更することはできません。Dozer 5.3.2 を使用しています。

4

4 に答える 4

10

カスタムゲッターメソッドを使用して使用できる場合があります。

マッピングの例を次に示します (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>

そのため、dozer は定義済みの getFoo の代わりに isFoo を使用します。これがうまくいくことを願っています。:)

于 2012-05-25T14:33:41.737 に答える
7

Boolean ラッパー クラスの「is」メソッドの生成は JAXB のバグです。詳細については、Java Beans、BeanUtils、および Boolean ラッパー クラスhttp://java.net/jira/browse/JAXB-131を参照してください。jaxb 2.1.13 で修正されたようです

于 2011-04-27T11:57:53.017 に答える
3

これは JAXB のバグです。small-bbooleanにはisFoo(). JAXB の新しいバージョンで -enableIntrospection オプションを使用するか、古いブール値ゲッター 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 に答える