[英]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.