【发布时间】: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