REST和非RESTful URL的Together不起作用
我试图获得两者的实际示例,纯粹的restful配置和至少一个非restful URL失败了。
我有这个页面作为指南: https : //cwiki.apache.org/confluence/display/WW/REST+Plugin
我有一个模型,带有几个测试字段的Receipt
。
纯REST解决方案按预期工作,所以这样做:
适用于以下结果:
receipt.json
=>显示所有收据的列表
receipt/1.json
=>显示id = 1的收据
但是如果我尝试将restful与非restful URL混合在一起(就像我在wiki文章中所说的那样),就像这样:
它爆炸了:
Struts has detected an unhandled exception: Messages: com.immaculate.receipto.controllers.ReceiptController.execute() File: java/lang/Class.java Line number: 1,778
我很迷惑。 为什么要搜索execute()? execute()应该是动作中存在的方法。 我没有给它一个动作,我给它一个像以前一样的控制器。
我该如何解决?
这是ReceiptController
:
public class ReceiptController implements ModelDriven { private ReceiptManager receiptManager = new ReceiptManager(); private String id; private Receipt model = new Receipt(); private Collection list; public Object getModel(){ if(list==null){ return model; } else { return list; } } public HttpHeaders create() { receiptManager.save(model); return new DefaultHttpHeaders("show"); } public HttpHeaders show() { model = receiptManager.find(id); return new DefaultHttpHeaders("show"); } public HttpHeaders destroy() { model = receiptManager.destroy(id); return new DefaultHttpHeaders("show"); } public HttpHeaders index() { list = receiptManager.list(); return new DefaultHttpHeaders("show"); } public String getId() { return id; } public void setId(String id) { this.id = id; } }
显然我在这里做错了。 除了这里解释的内容之外,我还需要了解其他内容吗?
另外,我怎么读这个? :
这是否意味着以/rest
开头的所有内容都将映射到我的纯静态控制器,而后者将映射到我的收据,而没有/rest
前缀的任何内容都将映射到默认的struts映射? 或者我在这里完全走错了方向?
基于前缀的动作映射器委托查找映射到由…定义的相应映射器
这意味着在最后一个斜杠/
之前在URL中具有/rest
所有URL都映射到其余映射器,而其他URL映射到默认映射器。 如果您有receipt
控制器,那么您应该使用值"/receipt:rest,:struts"
。
参考文献:
- REST插件
- RestfulActionMapper
- PrefixBasedActionMapper
我也有同样的错误,我通过添加修复它
{1}
REST和非REST动作的完整示例在这里https://github.com/sivailango/struts2-rest-nonrest