JavaSpring:RESTGET请求在主体中返回错误的内容
我试图从以下url获取Json:代码非常简单: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
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