2014-12-27 3 views
3

둘 다 작동 예제를 얻으려는 나의 모든 시도, 최소한 하나의 안정되지 않은 URL과 함께 순수한 안락한 구성이 실패했습니다.REST와 비 RESTful URL의 Together가 작동하지 않습니다.

나는 가이드로이 페이지가 : https://cwiki.apache.org/confluence/display/WW/REST+Plugin

나는 하나 개의 모델, 몇 가지 테스트 필드 Receipt 있습니다.

순수한 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을 사용하여 편안하게 섞으 려한다면 (이 같은 위키 문서에 LD는) :

<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 접두사없이 영수증 아무것도 차례로지도의 기본 스트럿 매핑에 매핑 할 것입니다 내 순수 편안한 컨트롤러에 매핑하는 것을 의미합니까? 아니면 완전히 잘못된 방향으로 가고 있습니까?

<constant name="struts.mapper.prefixMapping" value="/rest:rest,:struts"/> 

에 의해 정의 된 해당 매퍼에 매핑을 찾는

답변

2

접두사 기반의 액션 매퍼 대표단이는 모든 나머지 매퍼에 매핑되는 마지막 슬래시 / 전에 URL에 /rest이 URL을 다른 사람을 의미합니다 기본 매퍼. 컨트롤러가 receipt 인 경우 "/receipt:rest,:struts" 값을 사용해야합니다.

참고 : 나는이 같은 오류를 가지고 있어요

+0

감사합니다. 이 주제에 대한 더 많은 문서는 어디에서 찾을 수 있습니까? –

+2

Struts 웹 사이트의 링크를 업데이트했습니다. 천만에요. –

1

, 내가

<package name="api" namespace="/api" extends="rest-default"> 
    <action name="users/*" class="com.aurum.struts.rest.UserController"> 
     <param name="id">{1}</param> 
    </action> 
</package> 
를 추가하여 해결

함께 REST 및 비 REST 작업에 대한 전체 예는 여기 https://github.com/sivailango/struts2-rest-nonrest