Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaSpring:RESTGET请求在主体中返回错误的内容_Java_Spring_Rest_Character Encoding_Resttemplate - Fatal编程技术网

JavaSpring:RESTGET请求在主体中返回错误的内容

JavaSpring:RESTGET请求在主体中返回错误的内容,java,spring,rest,character-encoding,resttemplate,Java,Spring,Rest,Character Encoding,Resttemplate,我试图从以下url获取Json:代码非常简单: public Boolean getData(String apiUrl) { try { //disable SSLCertificateValidation SSLCertificateValidation.disable(); RestTemplate restTemplate = new RestTemplate(); Http

我试图从以下url获取Json:代码非常简单:

public Boolean getData(String apiUrl) {
        try {
            //disable SSLCertificateValidation
            SSLCertificateValidation.disable();

            RestTemplate restTemplate = new RestTemplate();
            HttpHeaders headers = new HttpHeaders();
            headers.add("Content-Type", "application/json;charset=UTF-8");
            headers.add("Accept", "*/*");
            
            ResponseEntity<String> responseEntity = restTemplate.getForEntity(apiUrl, String.class, headers);

            if (responseEntity.getStatusCode().toString().equals("200")) {
                theLogger.info("Server successfully answered with response code: {} - {}", responseEntity.getStatusCode().toString(), responseEntity.getBody());
                return true;
            } else {
                theLogger.error("Something goes wrong! Server answered with response code: {} and error: {}", responseEntity.getStatusCode().toString(), responseEntity.getBody());
                return false;
            }

        } catch (Exception theException) {
            theException.printStackTrace();
            theLogger.error("Exception: " + theException);
            return false;
        }

    }
public Boolean getData(字符串apirl){
试一试{
//禁用SSLCertificateValidation
SSLCertificateValidation.disable();
RestTemplate RestTemplate=新RestTemplate();
HttpHeaders=新的HttpHeaders();
添加(“内容类型”、“应用程序/json;字符集=UTF-8”);
标题。添加(“接受”、“*/*”);
ResponseEntity ResponseEntity=restTemplate.getForEntity(APIRL、String.class、Header);
if(responseEntity.getStatusCode().toString().equals(“200”)){
info(“服务器已成功响应,响应代码:{}-{}”,responseEntity.getStatusCode().toString(),responseEntity.getBody());
返回true;
}否则{
logger.error(“出现了问题!服务器用响应代码:{}和错误:{},responseEntity.getStatusCode().toString(),responseEntity.getBody()进行了响应);
返回false;
}
}捕获(异常){
异常。printStackTrace();
日志错误(“异常:+theException”);
返回false;
}
}
它起作用了,但我在身体里看到了这一点:

Server successfully answered with response code: 200 - ��������Y�n�}B� DiF�d�@P�(v����E�]�J�5CNH��b�<Fh_.O�s93��*v]���cs�s/��!�k'5y.S����ԑ�����Q<�Gq0���9%4/�q2����+��Ϋ�The response is compressed (gzipped) by the server. Most browsers/tools handle compressed responses transparently. Here you have to do it explicitly.

To uncompress the response you can use GZipInputStream.

ResponseEntity<byte[]> response = restTemplate.getForEntity(apiUrl, byte[].class);
GZIPInputStream gzip = new GZIPInputStream(new ByteArrayInputStream(response.getBody()));

// convert the stream to string
StringWriter writer = new StringWriter();
IOUtils.copy(gzip, writer, "UTF-8");
String responseString = writer.toString();

服务器已成功应答,响应代码:200-��������Y�N�}B� DiF�D�@P�(五)����E�]�J�5CNH��B� 响应由服务器压缩(gzip)。大多数浏览器/工具透明地处理压缩响应。在这里,您必须显式地执行此操作

要解压缩响应,可以使用


响应由服务器压缩(gzip)。大多数浏览器/工具透明地处理压缩响应。在这里,您必须显式地执行此操作

要解压缩响应,可以使用


你在处理图片吗?@user3742622你可能会收到这个消息,因为正文中的内容也包含俄文laguange内容和英文。Fwig添加
&lang=en
到url看看它是否有效。同时查看请求标题中的
accept header
。尝试引用这个@JasonZ No,它不是图片,而是Json。@pratikwebdev My th应该是完全一样的。我尝试了lang=en,这是同样的情况。我看了看标题-什么都没有。url应该可以工作,即使在没有区域设置的邮递员身上也可以。你能尝试添加accept JSON吗?就像这里你在处理图片一样?@user3742622你可能会得到这个,因为正文中的内容包含带有e的俄罗斯拉格文内容n语言。Fwig将
&lang=en
添加到url,看看它是否有效。同时查看请求标头中的
接受标头
。尝试引用这个@JasonZ不,它不是一张图片,它是Json。@pratikwebdev我的想法完全相同。我尝试了lang=en,这是相同的情况。我看了一下标头-没有。url工作正常即使是在没有区域设置的邮递员上。你能尝试添加accept JSON吗?就像在这里一样哇!伙计,你太棒了!非常感谢!你真的很安全!我以前从未使用过gzip。所以要获得我的JSON,可以这样做InputStreamReader=new InputStreamReader(gzis);BufferedReader in=new BufferedReader(reader);字符串已读;while((readed=in.readLine())!=null){System.out.println(readed);}再次感谢,老兄!!!很高兴我能帮上忙!是的,这是将响应转换为字符串的一种正确方法。更新了答案,使用commons-io显示转换。哇!老兄,你太棒了!非常感谢!你真的很安全!我以前从未使用过gzip。因此,要获取Json,可以执行类似InputStreamReader=new Input的操作吗StreamReader(gzis);BufferedReader in=new BufferedReader(reader);String readed;while((readed=in.readLine())!=null){System.out.println(readed);}再次感谢,伙计!!!很高兴我能提供帮助!是的,这是将响应转换为字符串的一种正确方法。使用commons io更新了答案以显示转换。
response.getHeaders().get("Content-Encoding"); // contains [gzip] if response is compressed