2011-12-30 70 views
3

我正在尝试将REST API添加到现有的struts 2应用程序中。使用Struts的REST API

这个想法是让部分应用程序使用标准的struts映射,另一部分使用REST。

因此,我使用的struts2-rest-plugin插件,并且增加了以下配置:

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.properties:

struts.action.extension=,htm,action,xml,json 

TasksController。 java:

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

} 

有了这个配置,基本的struts动作就可以工作了,但是我无法让REST动作起作用。 我也尝试了不同的struts.xml配置(包括约定插件选项),但没有任何成功,映射从未显示与config-brower plugin

任何想法,我已经错过了或做错了?

+0

你所说的 “不能让REST行动工作” 是什么意思?有点解释会帮助 – 2011-12-30 11:22:20

+0

对不起,我的意思是其余的动作总是返回404错误(GET和POST)或403错误(PUT和DELETE)。 – nicompte 2011-12-30 11:28:36

+0

我不确定REST是如何工作的,但你需要小心每个动作都应该有名称空间的定义。希望其他人可以看看这个 – 2011-12-30 11:53:07

回答

1

它终于奏效了,但它不久前还记得我做了什么,这里是我的配置,希望这有助于。

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() { 
     ... 
     } 
    ... 
}