java – 为什么RestTemplate GET响应是在JSON中应该是XML?

前端之家收集整理的这篇文章主要介绍了java – 为什么RestTemplate GET响应是在JSON中应该是XML?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用RestTemplate(org. springframework.web.client.RestTemplate)挣扎于一个额外的弹簧行为而没有成功.

我在代码下面的我的洞应用程序中使用并始终接收XML响应,我解析并评估其结果.

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

但无法弄清楚为什么服务器响应在执行后呈JSON格式:

  1. 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:

  1. public void doWithRequest(ClientHttpRequest request) throws IOException {
  2. if (responseType != null) {
  3. List<MediaType> allSupportedMediaTypes = new ArrayList<MediaType>();
  4. for (HttpMessageConverter<?> messageConverter : getMessageConverters()) {
  5. if (messageConverter.canRead(responseType,null)) {
  6. List<MediaType> supportedMediaTypes = messageConverter.getSupportedMediaTypes();
  7. for (MediaType supportedMediaType : supportedMediaTypes) {
  8. if (supportedMediaType.getCharSet() != null) {
  9. supportedMediaType =
  10. new MediaType(supportedMediaType.getType(),supportedMediaType.getSubtype());
  11. }
  12. allSupportedMediaTypes.add(supportedMediaType);
  13. }
  14. }
  15. }
  16. if (!allSupportedMediaTypes.isEmpty()) {
  17. MediaType.sortBySpecificity(allSupportedMediaTypes);
  18. if (logger.isDebugEnabled()) {
  19. logger.debug("Setting request Accept header to " + allSupportedMediaTypes);
  20. }
  21. request.getHeaders().setAccept(allSupportedMediaTypes);
  22. }
  23. }
  24. }

你能说出一个主意吗?

解决方法

我可以通过RC解决我的问题.的帮助.我会发布答案来帮助其他人.

问题是Accept标头自动设置为APPLICATION / JSON所以我不得不改变调用服务的方式,以便提供我想要的Accept标头.

我改变了这个:

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

为此,以使应用程序工作:

  1. // Set XML content type explicitly to force response in XML (If not spring gets response in JSON)
  2. HttpHeaders headers = new HttpHeaders();
  3. headers.setAccept(Arrays.asList(MediaType.APPLICATION_XML));
  4. HttpEntity<String> entity = new HttpEntity<String>("parameters",headers);
  5.  
  6. ResponseEntity<String> response = getRestTemplate().exchange(url,HttpMethod.GET,entity,String.class);
  7. String responseBody = response.getBody();

猜你在找的Java相关文章