问题描述
我有以下休息模板配置:
@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 (将#修改为@)