我有以下休息模板配置:
@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中运行良好。其余模板似乎以某种方式弄乱了错误响应主体。
答案 0 :(得分:0)
我不确定问题出在什么地方。我将rest模板配置为使用apache Http客户端,而不是rest模板使用的默认HttpUrlConnection。
这似乎很好,并且解决了垃圾错误响应正文问题。
This tutorial可以帮助我们做到这一点。