2015-05-24 44 views
2

我使用郵遞員客戶端發送RES請求,這個不安分的路由器:的Restlet後getFirstValue總是返回null

public Representation createAgent(Representation entity) { 
    Form form = new Form(entity); 

    String user = form.getFirstValue("user"); 
    String password = form.getFirstValue("password"); 


    System.out.println("user: "+ user); 
    System.out.println("password: "+ password); 
    System.out.println("form: "+ form.toString()); 

    return (agent.save(getUser(),getPassword())) 
      ? new StringRepresentation("user "+ user +" created", MediaType.TEXT_PLAIN) 
      : new StringRepresentation("agent creation failed",MediaType.TEXT_PLAIN); 

} 

UserA和密碼總是空雖然打印form.toString()顯示:

[[------WebKitFormBoundaryb4FkGv8CgddIf8rn 
Content-Disposition: form-data; name="user" 

ali 
------WebKitFormBoundaryb4FkGv8CgddIf8rn 
Content-Disposition: form-data; name="password" 

dsndfjo32 
------WebKitFormBoundaryb4FkGv8CgddIf8rn-- 
]] 

下面是在預覽模式下的全郵遞員要求:

POST /v1/agents HTTP/1.1 
Host: localhost:9000 
Authorization: Basic c2NvdHQ6amRmZ2pkZnRnaA== 
Cache-Control: no-cache 
Postman-Token: ef58fda2-8974-0d9f-7a23-10c94df8552e 
Content-Type: multipart/form-data; boundary=----      WebKitFormBoundary7MA4YWxkTrZu0gW 

----WebKitFormBoundary7MA4YWxkTrZu0gW 
    Content-Disposition: form-data; name="user" 

ali 
----WebKitFormBoundary7MA4YWxkTrZu0gW 
    Content-Disposition: form-data; name="password" 

    dsndfjo32 
----WebKitFormBoundary7MA4YWxkTrZu0gW 

回答

3

事實上,如果你看一下日您在請求中發送的數據的內容類型,這對應於多部分內容而不是URL編碼形式。

您在服務器資源中使用的代碼僅適用於URL編碼形式(內容類型application/x-www-form-urlencoded)。所以你一無所獲是正常的。有關信息,這種方法的有效載荷將是這樣的:

user=my+user&password=my+password 

也許這是你想要的東西。如果是這樣,請選擇Postman中的標籤x-www-form-urlencoded ...

Multipart通常用於需要使用其他數據上載文件的情況。如果多部分是你想要的,你應該看看這個鏈接:http://restlet.com/technical-resources/restlet-framework/guide/2.3/extensions/fileupload

希望它能幫到你, Thierry