少なくとも 1 つの非安静な URL と一緒に純粋な安静な構成の両方の動作例を取得しようとする私の試みはすべて失敗しました。
このページをガイドとして持っています: https://cwiki.apache.org/confluence/display/WW/REST+Plugin
Receipt
いくつかのテスト フィールドを持つ 1 つのモデルがあります。
純粋な REST ソリューションは期待どおりに機能するため、次のようにします。
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<constant name="struts.devMode" value="true"/>
<constant name="struts.mapper.class" value="rest" />
<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="rest-default"/>
<constant name="struts.convention.package.locators" value="controllers"/>
次の結果でうまく機能します。
receipt.json
=> すべての領収書のリストを表示する
receipt/1.json
=> id = 1 のレシートを表示
しかし、安らかな URL と安静でない URL を混ぜようとすると (wiki の記事で言われているのと同じ方法で)、次のようになります。
<constant name="struts.action.extension" value="xhtml,,xml,json,action"/>
<constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper" />
<constant name="struts.mapper.prefixMapping" value="/rest:rest,:struts"/>
<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="rest-default"/>
<constant name="struts.convention.package.locators" value="controllers"/>
これで爆発します:
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<Object> {
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;
}
}
明らかに、私はここで何か間違ったことをしています。ここで説明したこと以外に何か知っておく必要がありますか?
また、これはなんと読みますか?:
<constant name="struts.mapper.prefixMapping" value="/rest:rest,:struts"/>
これは、で始まるすべて/rest
が私の純粋な安らかなコントローラーにマップされ、次にレシートにマップされ、/rest
接頭辞のないものはすべてデフォルトの Struts マッピングにマップされることを意味しますか? それとも、ここで完全に間違った方向に進んでいますか?