我需要使用 Robospice for Android 发送一个POST HTTP 请求,该请求将包含以下格式的数据:
内容类型:应用程序/json
{'var1':'var1val','telNumber':'var2val'}
内部可能还有其他 HTTP 标头,但这是服务器所需的唯一标头 - 我已经使用一个简单的 HelloWorld 请求对其进行了测试,该请求不需要正文中的任何特定对象。
问题是我无法以正确的格式发送请求正文。我正在按照Robospice 教程做所有事情。
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 请求(不是toString()
某些方法的版本,只是原始请求)?我还能做错什么 - 可能是关于身体的编码吗?
请注意,我正在使用 Chrome 应用程序测试相同的请求以发送 REST 请求和curl
(工作正常)。