为什么 RestTemplate GET 响应在 JSON 中,而应该在 XML 中?
2022-09-04 00:58:49
我使用RestTemplate(org.springframework.web.client.RestTemplate)在异常弹簧行为中挣扎,但没有成功。
我在代码下方的孔应用程序中使用,并且始终收到XML响应,我解析并评估其结果。
String apiResponse = getRestTemplate().postForObject(url, body, String.class);
但无法弄清楚为什么服务器响应在执行后是JSON格式:
String apiResponse = getRestTemplate().getForObject(url, String.class);
我已经在低级RestTemplate上进行了调试,内容类型是XML,但不知道为什么结果是JSON。
当我从浏览器访问时,响应也是XML,但在apiResponse中,我得到了JSON。
在阅读春季文档后,我尝试了许多选项 http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/client/RestTemplate.html
还尝试显式修改标头,但仍然无法弄清楚。
我调试了 RestTemplate 类,并注意到此方法始终设置 application/json:
public void doWithRequest(ClientHttpRequest request) throws IOException {
if (responseType != null) {
List<MediaType> allSupportedMediaTypes = new ArrayList<MediaType>();
for (HttpMessageConverter<?> messageConverter : getMessageConverters()) {
if (messageConverter.canRead(responseType, null)) {
List<MediaType> supportedMediaTypes = messageConverter.getSupportedMediaTypes();
for (MediaType supportedMediaType : supportedMediaTypes) {
if (supportedMediaType.getCharSet() != null) {
supportedMediaType =
new MediaType(supportedMediaType.getType(), supportedMediaType.getSubtype());
}
allSupportedMediaTypes.add(supportedMediaType);
}
}
}
if (!allSupportedMediaTypes.isEmpty()) {
MediaType.sortBySpecificity(allSupportedMediaTypes);
if (logger.isDebugEnabled()) {
logger.debug("Setting request Accept header to " + allSupportedMediaTypes);
}
request.getHeaders().setAccept(allSupportedMediaTypes);
}
}
}
你能给出一个想法吗?