我正在尝试使用 Jackson 库从我的 Android 应用向 Web 服务器发送 JSON 请求,但响应始终为空。我仅使用 HttpRequest API 对其进行了测试,一切正常 - 我收到了回复。但是现在我尝试使用 Spring RestTemplate,但我无法收到结果。这是我的代码:
protected Void doInBackground(String... params) {
LinkedHashMap<String, Object> _map = new LinkedHashMap<String, Object>();
_map.put("login", "Fred");
_map.put("password", "pass");
ObjectMapper _mapper = new ObjectMapper ();
StringWriter _writer = new StringWriter();
try {
_mapper.writeValue(_writer,_map);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String _baseURL = "https...."//Address of the server;
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> _entity = new HttpEntity<String>(_writer.toString(),requestHeaders);
RestTemplate templ = new RestTemplate();
templ.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
templ.getMessageConverters().add(new StringHttpMessageConverter());
ResponseEntity<String> _response = templ.postForEntity(_baseURL, _entity,String.class);
String _Test = _response.getBody();
所以我在 _Test 中总是有 null。 我怀疑这是因为 https 协议(protocol)。 RestTemplate 可以使用 https 吗?
那么这段代码有什么问题。如何解决这个问题?
在此先感谢。我真的需要帮助!
最佳答案
您必须设置响应类型,否则 RestTemplate 将丢弃您的响应主体。它需要 responseType 来找到正确的消息转换器。对于 null responseType,下面的委托(delegate)将为 null...
if (delegate != null) {
T body = delegate.extractData(response);
return new ResponseEntity<T>(body, response.getHeaders(), response.getStatusCode());
}
else {
return new ResponseEntity<T>(response.getHeaders(), response.getStatusCode());
}
使用 RestTemplate 默认构造函数,Spring 几乎包含除 RSS、XML 和 JSON 之外的所有转换器,这取决于 Rome、JAXB 或 Jackson 是否在类路径中。我会将 responseType 设置为 String 并使用调试器运行它以查看为什么它找不到正确的转换器。如果没有看到来自服务器的响应和 header ,我很难说出原因。
关于java - 使用 RestTemplate.postForEntity 时总是在 ResponseEntity 中得到空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13936649/