2013-10-01 24 views
3

我需要發送使用Robospice爲Android,將有以下列格式的數據的POST HTTP請求Robospice:發送HTTP請求體內JSON數據

內容類型:應用/ JSON

{「VAR1」:「var1val」,「telNumber」:「var2val」}

可能有內部的其他HTTP頭但是這是由服務器所需的唯一標頭 - 我已經與測試它簡單的HelloWorld請求在體內不需要任何特定的物體。

問題是我無法以正確格式發送請求正文。我正在根據Robospice tutorial做所有事情。

loadDataFromNetwork() method

public T loadDataFromNetwork() throws Exception { // I'm making generic requests, T is a class representing given request 
    Uri.Builder uriBuilder = Uri.parse(mUrl).buildUpon(); // mURL is just a full URL, including the method (just HTTP, not HTTPS) 
    MultiValueMap<String, String> body = new LinkedMultiValueMap<String, String>(); 
    for (NameValuePair nvp : mPostParams) { // From the constructor: mPostParams = new ArrayList<NameValuePair>(); 
     body.add(nvp.getName(), nvp.getValue()); 
    } 

    HttpEntity<?> requestEntity = new HttpEntity<Object>(body, mHttpHeaders); 
    RestTemplate restTemplate = new RestTemplate(); 

    ResponseEntity<T> responseEntity = getRestTemplate().exchange(
      uriBuilder.build().toString(), HttpMethod.POST, requestEntity, 
      mClazz); 
    return responseEntity.getBody(); 
} 

JsonSpiceService類(擴展SpringAndroidSpiceService)

public RestTemplate createRestTemplate() { 
    RestTemplate restTemplate = new RestTemplate(true); 

    MappingJacksonHttpMessageConverter jsonConverter = new MappingJacksonHttpMessageConverter(); 
    FormHttpMessageConverter formHttpMessageConverter = new 
    FormHttpMessageConverter(); 
    StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(); 
    final List<HttpMessageConverter<?>> listHttpMessageConverters = restTemplate 
      .getMessageConverters(); 

    setTimeout(restTemplate); 

    listHttpMessageConverters.add(jsonConverter); 
    listHttpMessageConverters.add(formHttpMessageConverter); 
    listHttpMessageConverters.add(stringHttpMessageConverter); 
    restTemplate.setMessageConverters(listHttpMessageConverters); 
    return restTemplate; 
} 

createRestTemplate()這樣做,這樣,我不斷收到500 Internal Server Error,我敢肯定這是有關以格式化身體。有沒有得到一個原料 HTTP請求(不是toString()版本的一些方法只是一個原始請求)的方法嗎?我還有什麼可以做錯的 - 是否可以關於身體的編碼?

請注意,我用兩個Chrome應用中發送REST請求和curl測試同樣的請求(工作得很好)。

回答

0

你感到困惑在SpringAndroid使用。看看HttpEntity的文檔,你會看到你使用MultiValueMap是身體。在這種情況下,你是對的,body.toString被調用。

MultiValueMap在你認爲它是隻爲標題的方式使用。對於body而言,HttpEntity基本上期望Pojo,因此將MultiValueMap視爲Pojo。

一個簡單的解決辦法是手動創建您要發佈爲一體的字符串:

String body = "key=value&key=value&key=value" 

這種爭論可能會被用作HttpEntity的構造函數的第一個參數。