带Struts的restapi

带Struts的restapi,rest,struts2,struts,Rest,Struts2,Struts,我正在尝试向现有struts 2应用程序添加REST API 其思想是让应用程序的一部分使用标准struts映射,另一部分使用REST 因此,我使用了插件,并添加了以下配置: struts.xml: <constant name="rest" value="org.apache.struts2.rest.RestActionMapper"/> <constant name="struts.mapper.class" value="org.apache.struts2.

我正在尝试向现有struts 2应用程序添加REST API

其思想是让应用程序的一部分使用标准struts映射,另一部分使用REST

因此,我使用了插件,并添加了以下配置:

struts.xml:

<constant name="rest" value="org.apache.struts2.rest.RestActionMapper"/>
<constant name="struts.mapper.class"   
  value="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper"/>
<constant name="struts.mapper.prefixMapping" value="/rest:rest,/:struts"/>
struts.action.extension=,htm,action,xml,json
package xxx.common.webservice.rest;

public class TasksController implements ModelDriven<Task> {

  public String update() {
    return "UPDATE";
  }

  // Handles /tasks/{id} GET requests
  public String show() {
    return "YES";
  }

  @Override
  public Task getModel() {
    // TODO Auto-generated method stub
    return null;
  }

}
TasksController.java:

<constant name="rest" value="org.apache.struts2.rest.RestActionMapper"/>
<constant name="struts.mapper.class"   
  value="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper"/>
<constant name="struts.mapper.prefixMapping" value="/rest:rest,/:struts"/>
struts.action.extension=,htm,action,xml,json
package xxx.common.webservice.rest;

public class TasksController implements ModelDriven<Task> {

  public String update() {
    return "UPDATE";
  }

  // Handles /tasks/{id} GET requests
  public String show() {
    return "YES";
  }

  @Override
  public Task getModel() {
    // TODO Auto-generated method stub
    return null;
  }

}
包xxx.common.webservice.rest;
公共类TasksController实现模型驱动{
公共字符串更新(){
返回“更新”;
}
//处理/tasks/{id}GET请求
公共字符串显示(){
返回“是”;
}
@凌驾
公共任务getModel(){
//TODO自动生成的方法存根
返回null;
}
}
在这种配置下,基本的struts操作可以工作,但我无法让其余的操作工作。 我还尝试了不同的struts.xml配置(包括约定插件选项),但没有任何成功,映射永远不会显示在列表中


你知道我错过了什么或做错了什么吗?

它终于起作用了,但那是很久以前的事了,我不记得我到底做了什么,这是我的配置,希望能有所帮助

struts.xml

<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.package.locators" value="webservice"/>
<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.default.parent.package" value="rest-default"/>


<constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper" />
<constant name="struts.mapper.prefixMapping" value="/rest:rest,:struts" />

<package name="home" namespace="/" extends="struts-default">
    ...
</package>

...
TaskController.java

package com.test.webservice.rest;

public class TaskController extends RestActionSupport implements
    ModelDriven<TaskDTO> {
      public final HttpHeaderResult show() {
         ...
      }
    ...
}
package com.test.webservice.rest;
公共类TaskController扩展了RestActionSupport实现
模型驱动{
公开最终HttpHeaderResult展会(){
...
}
...
}

您所说的“无法使其余操作正常工作”是什么意思?抱歉,我的意思是rest操作总是返回404错误(GET和POST)或403错误(PUT和DELETE)。我不确定rest是如何工作的,但您需要注意的是,每个操作都应该定义名称空间。希望其他人可以查看此项检查用户列表档案,以便将rest与“常规”结合起来行动;我可以在周末玩这个,因为我做了完全相同的事情,但不记得当时是怎么做的:(我也在尝试同样的事情,有没有成功的一个。)。