Spring rest 模板垃圾错误响应正文
Spring rest template garbage error response body
我有以下休息模板配置:
@Bean
public RestTemplate restTemplate() {
RestTemplate template = new RestTemplate();
template.getMessageConverters().add(new ObjectToUrlEncodedConverter());
return template;
}
ObjectToUrlEncodedConverter
原样从
复制而来
我将其余部分称为 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<{Q����/fZ��������S��3RNy ��>ć��]S����+Е=��!��x9��)ώ��n%������
我尝试将 Charset
设置为“UTF-8”,同时获取如下所示的 errorResponseBody。
ex.getResponseBodyAsString(Charset.forName("UTF-8"))
另外,从 responseBodyByteArray 构建字符串如下:
new String(ex.getResponseBodyAsByteArray())
但还是没有运气。
相同的端点在 Postman 中运行良好。休息模板似乎以某种方式搞乱了错误响应主体。
我不确定到底是什么问题。我将其余模板配置为使用 apache Http 客户端,而不是其余模板使用的默认 HttpUrlConnection。
这似乎运作良好并修复了垃圾错误响应正文问题。
This tutorial 帮助我们做同样的事情。
我有以下休息模板配置:
@Bean
public RestTemplate restTemplate() {
RestTemplate template = new RestTemplate();
template.getMessageConverters().add(new ObjectToUrlEncodedConverter());
return template;
}
ObjectToUrlEncodedConverter
原样从
我将其余部分称为 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<{Q����/fZ��������S��3RNy ��>ć��]S����+Е=��!��x9��)ώ��n%������
我尝试将 Charset
设置为“UTF-8”,同时获取如下所示的 errorResponseBody。
ex.getResponseBodyAsString(Charset.forName("UTF-8"))
另外,从 responseBodyByteArray 构建字符串如下:
new String(ex.getResponseBodyAsByteArray())
但还是没有运气。
相同的端点在 Postman 中运行良好。休息模板似乎以某种方式搞乱了错误响应主体。
我不确定到底是什么问题。我将其余模板配置为使用 apache Http 客户端,而不是其余模板使用的默认 HttpUrlConnection。
这似乎运作良好并修复了垃圾错误响应正文问题。
This tutorial 帮助我们做同样的事情。