当前位置: 首页 > 知识库问答 >
问题:

spring RESTTemplate getForObject方法返回的内容类型“null”不受支持

潘星阑
2023-03-14

我在一个spring MVC控制器中有一个简单的REST方法,如下所示,它有一个签名:

@RequestMapping(value=“/person/{personId}”,method=RequestMethod.Get)public@ResponseBody对象getPerson(@PathVariable(“personId”)String personId){
...}

输出为object类型,因为从该方法返回了几种不同的数据类型。

当从spring MVC应用程序中的测试程序调用时,如下所示:

private static void getPerson() {
    logger.info(Rest.class.getName() + ".getPerson() method called."); 

    RestTemplate restTemplate = new RestTemplate();

    Person person = restTemplate.getForObject("http://localhost:8080/Library/rest/person/1", Person.class);   

    ObjectMapper responseMapper = new ObjectMapper(); 
    ...
    }

响应为内容类型'null'不受支持并且调用失败。

有人能告诉我为什么吗?

当从另一个应用程序中的测试程序调用时(该应用程序不使用spring,但发出HTTP GET请求),controller方法被正确地调用并工作。

共有1个答案

白学
2023-03-14

您可以尝试以下操作:

HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setReadTimeout(VERSION_CHECK_READ_TIMEOUT);
RestTemplate template = new RestTemplate(requestFactory);
Person person = restTemplate.getForObject("http://localhost:8080/Library/rest/person/1", Person.class);

如果上面的方法不起作用,您可以尝试使用实体方法,如下所示:

  RestTemplate restTemplate = new RestTemplate();

  // Prepare acceptable media type
  List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
  acceptableMediaTypes.add(MediaType.APPLICATION_XML); // Set what you need

  // Prepare header
  HttpHeaders headers = new HttpHeaders();
  headers.setAccept(acceptableMediaTypes);
  HttpEntity<Person> entity = new HttpEntity<Person>(headers);

  // Send the request as GET
  try {
      ResponseEntity<PersonList> result = restTemplate.exchange("http://localhost:8080/Library/rest/person/1", HttpMethod.GET, entity, PersonList.class);
      // Add to model
      model.addAttribute("persons", result.getBody().getData());

  } catch (Exception e) {
      logger.error(e);
  }

这里有很多有用的例子。

希望能帮忙

 类似资料:
  • 这是我的课。当我使用带有有效json的邮递员访问该url时http://localhost:8090/user 我犯了一个错误 我试过这个https://stackoverflow.com/a/38252762/11369236 我不想像这里这样使用requestparam https://stackoverflow.com/a/43065261/11369236 一些答案建议使用 但spring

  • 我有一个Vue.js应用程序,我的部署设置非常标准, 豆荚- 这是相关代码, Dockerfile: Nginx。形态: Ingress Prod:(为了简洁起见,仅保留必要的位), 本地入口: 我得到的错误是, 未捕获的语法错误:意外令牌 未捕获的语法错误:意外令牌 网络选项卡中这两种资源的内容类型都是。 编辑1: 这是部署后我的文件夹的外观, 我的js文件的路径是,

  • 我正在处理一个API的一部分,它需要调用另一个外部API来检索它的一个函数的数据。调用返回HTTP 500错误,描述为“不支持内容类型‘应用程序/八位字节流’。”该调用应返回“application/json”类型。" 我发现这是因为接收到的响应没有在其头中显式指定内容类型,即使其内容的格式为JSON,所以我的API默认假定它是一个八位字节流。 问题是,我不知道如何适应这种情况。即使另一个API没

  • 当我尝试向某个endpoint发送sparql查询时,例如: 我明白了 这不是唯一一个我无法向其发送查询的endpoint, 我应该怎么做才能在其他内容类型中获得结果?我试着用谷歌搜索它,但我发现如果我将查询发送到错误的html(不是sparqlendpoint),就会发生这种情况,但是http://data.open.ac.uk/sparql是一个好的endpoint,我通过python向它发送

  • 我对Spock Mock()对象有一个问题。我有一个java类正在尝试测试。这个类做了一些我想模拟的ftp内容。我的示例代码 现在,在“test execute”中的文件。each{}打印预期的内容。但当调用receivedata.execute()时,我的sftpUtils返回null。知道为什么吗?

  • 我试图通过RESTendpoint将数据从一个服务器发送到另一个服务器: 服务器B启动此请求: 服务器A接收请求并返回文件: 因此,很明显,我必须将声明更改为: 或者到 然后错误消失了,但我丢失了HttpStatus。回复时是否有确认信息?这里的正确解决方案是什么?