Java springrest模板垃圾错误响应主体

Java springrest模板垃圾错误响应主体,java,spring,rest,character-encoding,resttemplate,Java,Spring,Rest,Character Encoding,Resttemplate,我有以下rest模板配置: @Bean public RestTemplate restTemplate() { RestTemplate template = new RestTemplate(); template.getMessageConverters().add(new ObjectToUrlEncodedConverter()); return template; } objectTourenCodedConverter按原样从 我调用rest API,如下

我有以下rest模板配置:

@Bean
public RestTemplate restTemplate() {
    RestTemplate template = new RestTemplate();
    template.getMessageConverters().add(new ObjectToUrlEncodedConverter());
    return template;
}
objectTourenCodedConverter
按原样从

我调用rest API,如下所述:

try {
        response = template.exchange(uri, httpRequestObject.getMethod(), requestEntity, httpRequestObject.getResponseClass());
        responseObject.setHeaders(response.getHeaders().toSingleValueMap());
        responseObject.setHttpStatus(response.getStatusCode());
        responseObject.setResponseBody(response.getBody());
    } catch (HttpStatusCodeException ex) {
        log.error("Non OK response received from server. Status code: {}, response: {}", ex.getStatusCode(), ex.getResponseBodyAsString());
        throw ex;
    }
我面临的问题是,当响应是4xx或5xx系列时,响应体
ex.getResponseBodyAsString()
会给出垃圾值。类似这样:
�0E%6�1.�Y������惠普��N��\]8.���W���+Q��\�:s�Ȕ�������뚈M�'Z���毫升�)�@��]B͎�L؏4ĞV�`�v�Qx�Fć��]s���+Е=��!�x9��)Ԏ��n%������

我已尝试将
字符集设置为“UTF-8”,同时获得如下所示的errorResponseBody

ex.getResponseBodyAsString(Charset.forName("UTF-8"))
另外,从responseBodyByteArray构建字符串,如下所示:

new String(ex.getResponseBodyAsByteArray())
但还是没有运气


同样的终点在邮递员身上也很有效。Rest模板似乎以某种方式弄乱了错误响应主体。

我不确定问题到底出在哪里。我将rest模板配置为使用ApacheHTTP客户端,而不是rest模板使用的默认HttpUrlConnection

这似乎工作得很好,并修复了垃圾错误响应体问题

帮助我们做同样的事情