2011-07-17 108 views
1

我想創建一個寧靜的服務,在服務器端使用GAE和RESTlet,在客戶端使用jQuery。儘管RESTlet上的文檔很差,但我決心熟悉一個寧靜的框架。但是,我甚至無法獲得基本的功能。閱讀RESTlet請求數據

我遇到的問題是出現GET,POST,PUT和DELETE,只有DELETE請求出現來傳遞數據部分。

的調用是由這樣的:

function put() { 
    try { 
     $.ajax({ 
      url : url, 
      type : "PUT", //Same for GET, POST and DELETE 
      data : data, 
      success : function(data) { 
       try { 
        $("#results").text(data); 
       } catch (e) { 
        alert(e); 
       } 
      } 
     }); 
    } catch (e) { 
     alert(e); 
    } 
} 

在服務器端我有連接在路由器上的資源,它是這樣的:

public class TaskResource extends ServerResource 
{ 
    String userID = "jada"; 

    @Override 
    public void doInit() 
    { 
     super.doInit(); 
     userID = (String) getRequestAttributes().get("user"); 
    } 

    @Get 
    public String toString(String str) 
    { 
     return "GET: task of " + userID + " ||| DATA: " + str; 
    } 

    @Put 
    public String putit(String str) 
    { 
     return "PUT: task of " + userID + " ||| DATA: " + str; 
    } 

    @Post 
    public String postit(String str) 
    { 
     return "POST: task of " + userID + " ||| DATA: " + str; 
    } 

    @Delete 
    public String deleteit(String str) 
    { 
     return "DELETE: task of " + userID + " ||| DATA: " + str; 
    } 
} 

在上面的四種情況,作爲str,GET獲得一個空參數(可理解),PUT和POST獲得空字符串,DELETE獲取實際發送的數據。

我已經嘗試改變參數的類型(表示形式或表單)並使用更具體的註釋(例如@Get(「xml」))。目前爲止沒有成功。

歡迎任何建議。

+0

什麼是你的「數據」,你要發送的格式??? – PhD

+0

它只是一個字符串 – Chris

回答

1

建議:使用更好記錄的ReST框架。他們肯定在那裏。舉例來說,Jersey真的很容易啓動和運行,並且它具有實現JAX-RS的好處,其中有一些其他成熟的實現可供您在學習API時使用。

1

所以,你正試圖獲取請求實體。我不確定標有@Put@Post的方法是否應該像請求中那樣自動傳入請求實體。我不確定它爲什麼適用於DELETE,但不是其他的。無論如何,請嘗試下面的代碼,看看你是否有任何東西。如果getEntityAsText()仍然出現空白,則可能還有其他事情正在進行。

嘗試了這一點:

@Put 
public String putit() { 
    return this.getRequest().getEntityAsText(); 
} 
+0

getRequest()。getEntityAsText()在PUT和POST中返回null。 DELETE再次運作。另外,當沒有參數聲明時,PUT和POST不起作用(意味着沒有對瀏覽器的響應)。 – Chris