无法通过RestTemplate获取JSON

时间:2019-10-18 10:59:01

标签: java spring

有一些API可以通过它获取json,如果我在浏览器或邮递员中执行此url,则一切正常。如果我尝试通过restTeamplate获得它,那么我会得到各种各样的“爆竹”,尝试进行编码,但是什么都没发生(注释部分是我的尝试),有时还会出现其他爆竹,这是我的代码示例:

public String getInfo() {
    RestTemplate restTemplate = new RestTemplate();
    /*restTemplate.getMessageConverters()
            .add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));*/

    /*try {
        return new String(restTemplate.getForObject(API, String.class).getBytes(), "UTF-16");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }*/

    //return restTemplate.getForEntity(API, String.class);

    return restTemplate.getForObject(API, String.class);
}

如果您使用getForEntity方法,则邮递员或浏览器根本不会收到响应,我在邮递员中看到:在enter image description here

中输入图像描述

我怀疑我在请求中缺少一些标题。谁遇到过类似的问题,告诉我它是如何解决的,或者在哪里描述了类似的问题?

此api没有说明,但在浏览器中,此请求正常运行,尝试使用浏览器发送的标头

 public ResponseEntity<String> getInfo() {

        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.set("Sec-Fetch-Mode", "cors");
        httpHeaders.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 YaBrowser/19.9.3.314 Yowser/2.5 Safari/537.36");
        httpHeaders.set("Access-Control-Allow-Origin", "*");
        httpHeaders.set("Content-Type", "application/json; charset=utf-8");
        HttpEntity<HttpHeaders> entity = new HttpEntity<>(httpHeaders);
        return restTemplate.exchange(API, HttpMethod.GET, entity, String.class);
    }

答案中也有这样的标题

[X节点:“ BKLA36-LA”,缓存控件:“ no-cache”,内容类型:“ application / json; charset = utf-8”,访问控件允许来源:“ * “,Access-Control-Allow-Methods:“ POST,GET,OPTIONS”,Access-Control-Allow-Header:“ Content-Type”,Connection:“ keep-alive”,Content-Encoding:“ gzip”,Content-长度:“ 146305”]

也许问题出在内容编码:“ gzip”

0 个答案:

没有答案