【问题标题】:Spring REST GET request produces hashesSpring REST GET 请求产生哈希
【发布时间】:2018-04-17 08:50:19
【问题描述】:

这是我从特定 API 检索 JSON 字符串的代码:

 RestTemplate restTemplate = new RestTemplate();
 String jsonString = restTemplate.getForObject("http://us.turtlepool.space/api/stats", String.class);

它适用于其他几个网站,但它只在这个特定的 url 上生成:

HH
nTmâÖë«·ó`N¦ò±t'«SÆe÷âb}
ÆùT4;%g#þj*[Ã<«5·Ì
yTÖ%e¸ìh­e7Sµ,9\ÇX.æâësR|¼oñÏ1"%ºÄÆE[.w¿bâMm¤d×2¦÷\Ê25´ègj.YÜ£×Uñmég1ÖÕ]Æ_3¼M_7f}ö6|i)ÍTæOÚìmH5ç¤fbáã
ê51

可能出了什么问题?

【问题讨论】:

  • 你能在浏览器中访问它吗?
  • 是的。我在浏览器中得到了正常的 JSON 输出。

标签: java spring get spring-restcontroller spring-rest


【解决方案1】:

当使用 Firefox 查询您的 URL 时,我看到在响应标头中,我得到了“Compression=deflate”。这意味着返回的流是 GZIP 编码的。所以,返回的字符串实际上是压缩后的内容,而不是 json。我觉得奇怪的是 RestTemplate 默认不处理它。

为了使您的示例有效,我关注了this answer(在本地测试,响应看起来不错):

HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(
            HttpClientBuilder.create().build());
    RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory);
    String jsonString = restTemplate.getForObject("http://us.turtlepool.space/api/stats", String.class);

【讨论】:

  • 工作就像一个魅力。谢谢你。 :) 附带说明一下。我不得不导入一个似乎已被弃用的 org.apache.http 的 .jar。这会以任何方式影响我的应用吗?
  • 这个jar没有新版本了吗?如果您将来更新 lib 并使用此已弃用的 jar 对您的应用程序进行编码,您的应用程序的某些方法可能会停止工作...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多