【问题标题】:Spring rest template garbage error response bodySpring rest模板垃圾错误响应体
【发布时间】:2020-09-14 15:15:31
【问题描述】:

我有以下其余模板配置:

@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�Qx�Fć��]S���+Е=��!�x9��)Ԏ��n%������

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

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

另外,从 responseBodyByteArray 构建字符串如下:

new String(ex.getResponseBodyAsByteArray())

但还是没有运气。

相同的端点在 Postman 中运行良好。休息模板似乎以某种方式弄乱了错误响应正文。

【问题讨论】:

    标签: java spring rest character-encoding resttemplate


    【解决方案1】:

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

    这似乎运作良好并修复了垃圾错误响应正文问题。

    This tutorial 帮助我们做同样的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 2015-11-09
      • 2022-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多