我正在尝试使用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中总是有空。 我怀疑这是因为https协议。 RestTemplate可以与https一起使用吗?
那么代码有什么问题。如何解决这个问题?
提前致谢。我真的需要帮助!
答案 0 :(得分:1)
您必须设置responseType,否则RestTemplate将丢弃您的响应正文。它需要responseType才能找到正确的消息转换器。使用null responseType,下面的委托将为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并使用调试器运行它以查看为什么它找不到正确的转换器。如果没有看到服务器的响应和标题,我很难说出原因。
答案 1 :(得分:0)
错字或您是否正在连接到https端口?
String _baseURL =“https ....”//服务器的地址;
我认为您应该监控您尝试连接的端口,看看是否建立了连接。我这样做的一个简单方法是让笔记本电脑成为一个ad-hoc网络,并让Android设备连接到它,然后,您应该能够使用像wireshark这样的数据包嗅探器来监控来自Android设备的所有流量。