java - 使用 RestTemplate.postForEntity 时总是在 ResponseEntity 中得到空响应

标签 java android spring resttemplate

我正在尝试使用 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/

相关文章:

java - Java中HierarchyStruc类中的ClassCastException如下

android - 抽屉导航,处理后退按钮以转到以前的 fragment ?

java - 书 : Modern day equivalent of the Wrox Spring book

java - 使用 Java 配置的 Spring 4 REST 应用程序(无 xml) IllegalArgumentException

java - 为什么 google-collections AbstractMultimap 类对成员变量使用 transient 关键字?

java - 我如何通过junits中的参数传递一个类?

java - 如何将我的 Maven 项目部署为 jar 文件,该文件将使用 pom 文件获取其依赖项?

android - 如何制作透明背景的SurfaceView?

android - 由 : java. lang.ClassNotFoundException: Didn't find class "com.example.aol.Application"on path: DexPathList error flutter 引起

java - 在身份验证之前检查用户启用状态 - Spring Security