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

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

我不能

但是,我可以像这样返回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));
        }
    }
}


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

最佳答案

您的错误表明您没有用于类型为application / xml的接口FoodItem的消息正文编写器。现在,假设您使用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中查看更多详细信息和执行此操作的其他方式。

关于java - REST如何返回接口(interface)列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16587217/

10-10 03:19