2011-12-30 217 views
3

既存のstruts 2アプリケーションにREST APIを追加しようとしています。Strutsを使用したREST API

アイデアは、標準的なストラットマッピングを使用するアプリケーションの一部と、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アクションが仕事を得ることができない" によって何を意味しますか?少しの説明が役に立ちます –

+0

残念なことに、残りのアクションは常に404エラー(GETとPOST)または403エラー(PUTとDELETE)を返します。 – nicompte

+0

どのようにRESTが動作するのか分かりませんが、すべてのアクションには名前空間が定義されている必要がありますので注意してください。 –

答えて

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() { 
     ... 
     } 
    ... 
} 
関連する問題