2011-12-30 58 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() { 
     ... 
     } 
    ... 
}