2

我有一个FoodItemImpl实现接口的类FoodItem

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

我不能

但是,我可以返回FoodItemImpl这样的列表:

包装机

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));
        }
    }
}

休息代码

@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;
    }
4

2 回答 2

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中的更多详细信息和其他方法。

于 2013-05-16T12:44:47.677 回答
0

尝试注释您的接口 Getter 方法 (JAXB) 以定义结果 XML 中的元素。我相信这应该可以解决您的问题。

不要返回列表,而是尝试使用另一个为您保存列表的 XmlElement 类(如果需要,可以使用接口)。

于 2013-05-16T12:40:12.290 回答