0

Dozer を使用していくつかの Bean をマッピングしていますが、理解できないマッピングがあります。

ここに私のクラスがあります:

class A{
    private ComplexeType type;
    //Constructors & getters    
}

class B{
    private String[] type;
    //Constructors & getters 
}

class ComplexteType{
     private List<String> list;
    //Getter for the list, no constructor
}

クラス A をクラス B にマップするにはどうすればよいですか?

xmlを使用して、クラスAのフィールド型をクラスBのフィールド型にマッピングしたいと考えています。

xml ファイルは次のとおりです。

<mapping>
        <class-a>A</class-a>
        <class-b>B</class-b>
        <field custom-converter="AToBCustomConverter">
            <a>type</a>
            <b>type</b>
        </field>
    </mapping>

そして、これが私の CustomConverter からの一口です

if (source == null) {
            return null;
        }
        B dest = null;
        if (source instanceof java.lang.String) {
            // check to see if the object already exists
            if (destination == null) {
                dest = new A();
            } else {
                dest = (A) destination;
            }
            dest.getTypes().add((String) source);
            return dest;
        } else if (source instanceof B) {
            String[] sourceObj = ((B) destination)
                    .getType()
                    .toArray(
                            new String[((B) destination)
                                    .getType().size()]);
            return sourceObj;
        } else {
            throw new MappingException(
                    "Converter StatResultCustomConverter used incorrectly. Arguments passed in were:"
                            + destination + " and " + source);
        }
    }
4

2 に答える 2

1

CustomConverterこの場合、あなたは必要ないと思います。こちらをご覧ください

マッピングファイルでこれを試してください。

<mapping>
  <class-a>A</class-a>
  <class-b>B</class-b>
  <field>
    <a>type.list</a>
    <b>type</b>
  </field>
</mapping>

Dozerはネストされたマッピングを自動的に実行する必要があります。

于 2012-04-04T18:17:52.953 に答える
1

問題を解決するために使用したマッピングを次に示します。

<mapping>
  <class-a>Q</class-a>
  <class-b>B</class-b>   
  <field>
    <a is-accessible="true">type<list</a>
    <b is-accessible="true">type</b>
  </field>
</mapping>
于 2012-04-05T15:48:54.040 に答える