2012-06-05 2 views
0

Я пытаюсь опубликовать объект JSON в .net веб-сервиса:RestTemplate для Android не правильно преобразования JSON в запросе HTTP для метода postForObjects

RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters().add(new GsonHttpMessageConverter()); 
answer[] answers = restTemplate.postForObject(url, new Gson().toJson(request), answer[].class); 

Сгенерированный выглядит отлично JSON до сих пор:

{"request":1234} 

но при отправке веб-службы с помощью restTemplate содержание запроса HTTP является своего рода перепутались:

"{\"request\":1234}" 

и служба отвечает с кодом ошибки 400 Bad Request

Edit: нашел проблему

Проблема заключалась в том, что я закодировал объект дважды. RestTemplate уже кодирует объект json.

рабочий код:

RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters().add(new GsonHttpMessageConverter()); 
answer[] answers = restTemplate.postForObject(url, request, answer[].class); 

ответ

1

Нет необходимости кодировать объект с gson, как RestTemplate уже делает что

правильный код:

RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters().add(new GsonHttpMessageConverter()); 
answer[] answers = restTemplate.postForObject(url, request, answer[].class); 
1
use this method to post json over the server 

public String postData(String url, JSONObject obj) { 
     // Create a new HttpClient and Post Header 
     String InsertTransactionResult = null; 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpParams myParams = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(myParams, 1000); 
     HttpConnectionParams.setSoTimeout(myParams, 1000); 

     try { 

      HttpPost httppost = new HttpPost(url.toString()); 
      httppost.setHeader("Content-type", "application/json"); 
      StringEntity se = new StringEntity(obj.toString()); 
      se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, 
        "application/json")); 
      httppost.setEntity(se); 

      HttpResponse response = httpclient.execute(httppost); 
      Result = EntityUtils 
        .toString(response.getEntity()); 

     } catch (ClientProtocolException e) { 

     } catch (IOException e) { 
     } 
     return Result; 
    }