мне нужно отправить запрос HTTP на POST с помощью Robospice для Android, которые будут иметь данные в следующем формате:Robospice: Отправка данных в формате JSON в HTTP теле запроса
Content-Type: применение/JSON
{ «var1»: «var1val», «telNumber»: «var2val»}
Там могут быть и другие HTTP-заголовки внутри, но это только заголовок требует сервер - я тестировал с простой HelloWorld req uest, который не требует каких-либо конкретных объектов в теле.
Проблема в том, что Я не могу отправить тело запроса в правильном формате. Я делаю все согласно 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();
}
createRestTemplate()
в 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;
}
делая это таким образом, я получаю 500 Internal Server Error
и я уверен, что это связано к формату тела. Есть ли способ получить сообщение HTTP raw HTTP (а не версию toString()
некоторых методов только необработанный запрос)? Что еще я могу делать неправильно - может быть, это о кодировании тела?
Обратите внимание, что я тестировал тот же запрос с обоими приложениями Chrome для отправки запросов REST и curl
(работал отлично).