我有一个实现接口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/