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