为什么RestTemplate GET响应应为XML时为JSON?

我无法使用RestTemplate(org.springframework.web.client.RestTemplate)应对额外的弹簧行为,但没有成功。

我在代码下面的Hole应用程序中使用,并且始终会收到XML响应,该响应会解析并评估其结果。

String apiResponse = getRestTemplate().postForObject(url, body, String.class);

但是无法确定为什么执行后服务器响应为JSON格式:

String apiResponse = getRestTemplate().getForObject(url, String.class);

我已经在较低级别的RestTemplate上进行了调试,内容类型为XML,但是不知道为什么结果为JSON。

当我从浏览器访问时,响应也是XML格式,但是在apiResponse中,我得到了JSON。

在阅读Spring文档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);

}

}

}

你能给个主意吗?

回答:

我可以在RC的帮助下解决我的问题。我将发布答案以帮助其他人。

问题在于,Accept标头会自动设置为APPLICATION / JSON,因此我必须更改调用服务的方式才能提供所需的Accept标头。

我改变了这个:

String response = getRestTemplate().getForObject(url, String.class);

为了使应用程序正常工作:

// Set XML content type explicitly to force response in XML (If not spring gets response in JSON)

HttpHeaders headers = new HttpHeaders();

headers.setAccept(Arrays.asList(MediaType.APPLICATION_XML));

HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);

ResponseEntity<String> response = getRestTemplate().exchange(url, HttpMethod.GET, entity, String.class);

String responseBody = response.getBody();

以上是 为什么RestTemplate GET响应应为XML时为JSON? 的全部内容, 来源链接: utcz.com/qa/418941.html

回到顶部