Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Java HttpClientErrorException getResponseBodyAsString()无法将字节解析为字符串_Java_Spring_Spring Boot - Fatal编程技术网

Java HttpClientErrorException getResponseBodyAsString()无法将字节解析为字符串

Java HttpClientErrorException getResponseBodyAsString()无法将字节解析为字符串,java,spring,spring-boot,Java,Spring,Spring Boot,我在从第三方服务器获取403 http代码响应时遇到问题。2019年4月5日之前,我能够从第三方正确获取响应正文,但目前我正在从getResponseBodyAsString检索一个可能未正确转换为字符串的字节。这是包org.springframework.web.client中的问题吗 @Autowired RestClient restClient; try{ //Request via restTemplate ResponseEntity<

我在从第三方服务器获取403 http代码响应时遇到问题。2019年4月5日之前,我能够从第三方正确获取响应正文,但目前我正在从getResponseBodyAsString检索一个可能未正确转换为字符串的字节。这是包org.springframework.web.client中的问题吗

    @Autowired
    RestClient restClient;
    try{
    //Request via restTemplate
     ResponseEntity<String> responseEntity = restClient.makeClientRequestJson(batch_type.getEndpoint(), HttpMethod.POST, httpHeaders, batch_payload.getRequest(), ProcessorConstants.moduleId);
    } catch (HttpClientErrorException | HttpServerErrorException ex) {
                loggingService.writeLogs("Error From Third Party Request, Message: " + ex.getMessage() + "| Response Body: " + ex.getResponseBodyAsString(), this.getClass(), LoggingEnum.ERROR, BatchConstants.moduleId);
     ...
以下是调试代码时得到的示例值:

更新:这是由于客户端服务器的响应头,响应上的一些奇怪的头,如连接->关闭。如果有人遇到此问题,请确保首先扫描标题响应

更新:这是由于客户机服务器的响应头,响应上的一些奇怪的头,如连接->关闭。如果有人遇到此问题,请确保首先扫描标题响应

没有更多的信息很难帮助你。你能提供一个问题的答案吗?对不起,我将重新措辞这篇帖子中的句子如果它在2019年4月5日之前有效,我问你的第三方服务器切换了响应?!?试着使用另一个工具,例如用于Chrome的Restlet客户端插件。不,它们不会像我在4月5日拥有它们的日志那样改变,但不管怎样,我只需要获得与直接命中第三方api相同的json字符串。(参见第三段)如果没有任何改变,那么就不会有任何东西中断。如果它坏了,那么有些东西就变了。试着找出发生了什么变化,这可能会指向“为什么这不再有效”的答案。如果没有更多的信息,很难帮助你。你能提供一个问题的答案吗?对不起,我将重新措辞这篇帖子中的句子如果它在2019年4月5日之前有效,我问你的第三方服务器切换了响应?!?试着使用另一个工具,例如用于Chrome的Restlet客户端插件。不,它们不会像我在4月5日拥有它们的日志那样改变,但不管怎样,我只需要获得与直接命中第三方api相同的json字符串。(参见第三段)如果没有任何改变,那么就不会有任何东西中断。如果它坏了,那么有些东西就变了。试图找出发生了什么变化,这可能会指向“为什么这不再有效”的答案。
public ResponseEntity<String> makeClientRequestJson(String url, HttpMethod httpMethod, HttpHeaders headers, String jsonBody , String moduleId){
    RestTemplate restTemplate = new RestTemplate();

    HttpEntity<String> entity = new HttpEntity<>(jsonBody, headers);
    loggingService.writeLogs("Third Party Request: " + entity.getBody() + "| url: " + url + " | method: " + httpMethod.toString(), RestClientImpl.class, LoggingEnum.INFO, moduleId);

    ResponseEntity<String> response =  restTemplate.exchange(url, httpMethod, entity, String.class);
    loggingService.writeLogs("Third Party Response: " + response.getBody() + "| url: " + url + " | method: " + httpMethod.toString(), RestClientImpl.class, LoggingEnum.INFO, moduleId);
    return response;
}
{
    "code": "403020",
    "transactionID": "1555495478-1409322457-83999786",
    "message": "Account is Level 1"
}