2012-06-09 65 views
0

通過JSON將表單條目發送到另一個客戶端資源時,發生415錯誤。下面代碼中的目標URI(「/ message」)在不使用表單的情況下工作(即,用測試模擬對象命中「/ message」)。Restlet POST通過JSON發送到客戶端資源的表單

這裏是我的代碼來獲取表單的值,併發布到目標資源。我錯過了需要完成的事情嗎?

我使用以下:

  • 的Restlet:2.1 RC5
  • GAE:1.6.1

形式的Restlet:

@Post 
public void handlePost(Representation entity) { 

    final Form webForm = new Form(entity); 
    MessageEntity newMessage = new MessageEntity(); 

    String subject = webForm.getFirstValue("subject"); 
    String sendto = webForm.getFirstValue("email"); 
    String message = webForm.getFirstValue("message"); 

    newMessage.setCategoryID(subject); 
    newMessage.setAccountID(sendto); 
    newMessage.setMessageText(message); 

    ClientResource cr = new ClientResource(getRootRef()+ "/message"); 
    cr.post(newMessage, MediaType.APPLICATION_JSON); 
} 

目標資源(「/消息「)

@Post("json") 
    public void HandleRequest(MessageEntity messageEntity) { 

    // Logic here 

    } 

如果您需要更多信息,請讓我知道

謝謝!

回答

1

我有非常類似於你的代碼,工作正常。我也運行類似版本的Restlet和GAE。我的第一個問題是,您的目標資源中有其他@Post方法,因爲有時排序很重要。

這裏有兩個代碼版本,我有工作.... 1)

public Representation postHandler() {  
    Reference commitsRef = new Reference(Consts.RESOURCE_BASE + "commitments/");  
    ClientResource commitsResource = new ClientResource(getContext(), commitsRef); 
    .... 
    Representation commitsRep = commitsResource.post(commitForm); 

即張貼的形式,說明如何處理@Post(「JSON」)和目標資源@帖子(「形式」)

2)

public Representation doPostFromGet() { 
    Reference takeActRef = new Reference(Consts.RESOURCE_BASE + "commitment/" 
     + commitmentId + "/userActs/");  
    ClientResource takeActResource = new ClientResource(getContext(), takeActRef); 
    ... 
    Representation takeActRep = takeActResource.post(newAct); 

即發佈一個Java對象的形式使用我稱之爲「派爾斯神奇」。請參閱: http://tembrel.blogspot.com/2012/03/converting-forms-in-restlet-to-pojos.html 它允許您在目標中有一個帖子()並接受表單和pojos。

在一個小問題上,如果你正在做一個帖子來添加一條新消息,那麼url應該是「/ messages /」(複數) - 也許在某處存在一個錯字? (這種可能性不大,但我想我會提到它)。

祝你好運,

RB

相關問題