簡體   English   中英

Set中的推土機映射 <Object> 列出 <ENUM>

[英]Dozer mapping from Set<Object> to List<ENUM>

我想將一組對象映射到枚舉列表。 我已經創建了一個自定義轉換器,將枚舉轉換為等效的字符串。 當我嘗試運行啟動上述轉換的Junits時,推土機會引發以下錯誤:

org.dozer.MappingException: java.lang.NoSuchMethodException: 

例如:我想將Set <Foo>轉換為List <FOO>

class Foo{
    private String FOO; // this contains same data as the enum FOO
    private String foo1;
}

enum FOO { 
    A,B; 
}

如果您顯示了完整的堆棧跟蹤,映射xml,客戶轉換器和相關代碼,那就更好了。 我可能會誤以為您會收到NoSuchMethodException,因為您錯誤地使用了枚舉構造函數。

但是,這是一個CustomConverter,它成功地將一組對象映射到枚舉列表(我將枚舉標記為“ Bar”而不是“ FOO”):

public class EnumClassConverter implements CustomConverter{

    public Object convert(Object dest, Object source, Class<?> arg2, Class<?> arg3) {
        if (source == null)
            return null;

        if (source instanceof Set<?>){
            Set<Foo> setOfFoos = (Set<Foo>) source;
            List<Bar> listOfBars = new ArrayList<Bar>();
            for (Foo f:setOfFoos){
                if (f.getFOO()=="A") listOfBars.add(Bar.A);
                else listOfBars.add(Bar.B);
            }
            return listOfBars;
        }
        else if (source instanceof List<?>){
            List<Bar> listOfBars = (List<Bar>) source;
            Set<Foo> setOfFoos = new HashSet<Foo>();

            for (Bar b : listOfBars){
                Foo f = new Foo();
                if (b ==Bar.A){
                    f.setFOO("A");
                }
                else f.setFOO("B");
                setOfFoos.add(f);
            }
            return setOfFoos;
        }
        else {
          throw new MappingException("Converter EnumClassConverter "
              + "used incorrectly. Arguments passed in were:"
              + dest + " and " + source);
            }
    }

}

和映射XML:

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://dozer.sourceforge.net
          http://dozer.sourceforge.net/schema/beanmapping.xsd">
    <mapping>
        <class-a>beans.FooContainer</class-a>
        <class-b>beans.BarContainer</class-b>
        <field custom-converter="converter.EnumClassConverter" >
            <a>fooSet</a>
            <b>listOfBars</b>
        </field>        
    </mapping>
</mappings>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM