2011-12-14 93 views
2

請您註釋這個客戶端restlet代碼有什麼問題。restlet客戶端POST頭和JSON POST請求

這是必要的:

  1. 與價值令牌
  2. 將JSON文件HTTP請求的主體添加HTTP標頭X-MF-Auth-Token
  3. 製作POST請求到服務器

發佈採購信息生成「400」錯誤。非常感謝你!

 ClientResource cr = new ClientResource(servername + "/json/place"); 

     cr.getRequest().getAttributes().put("X-MF-Auth-Token", token); 

     Form form = new Form(); 

     form.add("Category", ""); 
     form.add("CategoryId", "A1EECAB9-3E66-4F14-92E9-465EDFB22BA7"); 
     form.add("Latitude", "0"); 
     form.add("Longitude", "0"); 
     form.add("Name", "Loremipsum"); 
     form.add("PlaceId", "00000000-0000-0000-0000-000000000099"); 

    cr.post(form, MediaType.APPLICATION_JSON); 

    if (cr.getStatus().isSuccess()) { 
     // Register Successful 
     Log.v("Register()", "Successeful"); 
     return true; 
    } else { 
     Log.v("Register()", "ERROR"); 
     return false; 
    } 

    } catch (ResourceException e) { 
     // Login Error 
    Log.v("AddPlace() error:", e.getStatus().toString()); 
    return false; 
    } 

回答

0

我認爲你是不加入X-MF-Auth-Token頭。

嘗試

Form headers = (Form) cr.getRequest().getAttributes("org.restlet.http.headers"); 
if (headers == null) { 
    headers = new Form(); 
    cr.getRequest().getAttributes.put("org.restlet.http.headers", headers); 
} 
headers.add("X-MF-Auth-Token", token); 
+0

謝謝,這是有益的,但仍然無法正常工作。有必要將Content-Type設置爲JSON,但它會發送Content-Type:application/x-www-form-urlencoded。有任何想法嗎?非常感謝你。 – user1096826 2011-12-16 13:04:50

1

您可以使用JSONObject的,而不是形式的:

JSONObject jo = new JSONObject(); 
try { 
    jo.add("Category", ""); 
    jo.add("CategoryId", "A1EECAB9-3E66-4F14-92E9-465EDFB22BA7"); 
    jo.add("Latitude", "0"); 
    jo.add("Longitude", "0"); 
    jo.add("Name", "Loremipsum"); 
    jo.add("PlaceId", "00000000-0000-0000-0000-000000000099"); 
} catch (JSONException ex) {   
} 
cr.post(new JsonRepresentation(jo), MediaType.APPLICATION_JSON);