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

时间:2020-09-14 15:15:31

标签: java spring rest character-encoding resttemplate

我有以下休息模板配置:

@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<{Q��/fZ������S3RNy ��>ć��]S���+Е=��!�x9��)Ԏ��n%������

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

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

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

new String(ex.getResponseBodyAsByteArray())

但仍然没有运气。

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

1 个答案:

答案 0 :(得分:0)

我不确定问题出在什么地方。我将rest模板配置为使用apache Http客户端,而不是rest模板使用的默认HttpUrlConnection。

这似乎很好,并且解决了垃圾错误响应正文问题。

This tutorial可以帮助我们做到这一点。

相关问题