2013-05-16 74 views
2

我有一個類FoodItemImpl,它實現了接口FoodItemREST如何返回接口列表

我想使用REST返回FoodItem的列表。

我不能

不過,我可以返回的FoodItemImpl名單如下:

Wraper

enum wria { 
    instance; 
    private Map<Integer, FoodItemImpl> map = new HashMap<Integer, FoodItemImpl>(); 

    public Map<Integer, FoodItemImpl> get() { 
     return this.map; 
    } 

    wria() { 
     List<FoodItem> LL = FoodItemImpl.getAllFoodItems(); 
     for (int i = 0; i < LL.size(); i++) { 
      map.put(LL.get(i).getID(), (FoodItemImpl) LL.get(i)); 
     } 
    } 
} 

REST代碼

@GET 
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
    public List<FoodItemImpl> getXML() { 
     List<FoodItemImpl> ll = new LinkedList<FoodItemImpl>(); 
     ll.addAll(wria.instance.get().values()); 
     return ll; 
    } 
+0

@acdcjunior我編輯的問題,我添加了代碼,使得例外,我添加了異常 – user2387331

+0

我的意思是開始代碼的'FoodItem'和'FoodItemImpl'。我們需要檢查註釋。 – acdcjunior

+0

'foodItemImpl'的開始代碼是'@Path(「/ fooditems」)','FoodItem'沒有註釋 – user2387331

回答

4

您的錯誤指出您沒有將接口FoodItem的消息正文寫入器應用於application/xml類型。現在,假設您將JAXB用作XML的默認mbw:

JAXB無法綁定開箱即用的接口。你必須創建一個適配器:

public class AnyFoodItemAdapter extends XmlAdapter<Object,Object> { 
    Object unmarshal(Object v) { return v; } 
    Object marshal(Object v) { return v; } 
} 

然後註釋FoodItem:

@XmlJavaTypeAdapter(AnyFoodItemAdapter .class) 
interface FoodItem { 
    ... 
} 

查看更多詳細信息,並在這樣做的其他方式:Project JAXB - Mapping Interfaces

+0

我使用Jersy,這是否使它與你的答案有所不同? – user2387331

+0

不,Jersey是JAX-RS的實現者。它必須使用另一個框架將對象轉換爲XML。 JAXB就是這樣的框架之一。 – acdcjunior

0

嘗試註釋接口獲取方法(JAXB)以定義結果XML中的元素。我相信這應該能解決你的問題。

而不是返回列表,嘗試擁有另一個XmlElement類(如果你想要的話),它爲你保存一個列表。

+0

我不明白,請你舉一個例子 – user2387331