Spring Rest模板垃圾错误响应正文

问题描述

我有以下休息模板配置:

@Bean
public RestTemplate restTemplate() {
    RestTemplate template = new RestTemplate();
    template.getMessageConverters().add(new ObjectToUrlEncodedConverter());
    return template;
}

ObjectToUrlEncodedConverter是从this answer复制的

然后按如下所述调用其余的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������hP��N��\]8���w���+Q��\�:S�Ȕ�������뚈M�'Z�� ml。)@@]B͎L؏4ĞV�V�QxFć��]S���+Е=��!�x9��)Ԏ��n%������

我尝试将Charset设置为“ UTF-8”,同时收到如下所示的errorResponseBody。

ex.getResponseBodyAsString(Charset.forName("UTF-8"))

此外,按照以下方式从responseBodyByteArray构建字符串:

new String(ex.getResponseBodyAsByteArray())

但仍然没有运气。

同一个端点在Postman中运行良好。其余模板似乎以某种方式弄乱了错误响应主体。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)