【问题标题】:Content type 'null' not supported returned by Spring RESTTemplate getForObject methodSpring RESTTemplate getForObject 方法不支持返回的内容类型“null”
【发布时间】:2014-08-21 12:01:57
【问题描述】:

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

@RequestMapping(value="/person/{personId}", method=RequestMethod.GET) 公共 @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(); 
    ...
    }

响应为Content type 'null' not supported,调用失败。

谁能告诉我为什么?

当从另一个不使用 Spring 但发出 HTTP GET 请求的应用程序中的测试程序调用时,控制器方法被正确调用并工作。

【问题讨论】:

    标签: java rest http spring-mvc


    【解决方案1】:

    你可以试试这个:

    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);
    

    如果上述方法不起作用,您可以尝试使用Entity 方法,例如:

      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);
      }
    

    有很多useful examples here

    希望能帮到你

    【讨论】:

    • 谢谢,但关于第一个,VERSION_CHECK_READ_TIMEOUT 住在哪里?而对于第二个,参数(“”)会引起麻烦。
    • @MrMorgan 抱歉,请再次检查。
    • 我在Person 类中没有这样的getData() 方法。然而,尽管代码仍然返回不支持的内容类型'null',这很奇怪,因为我已将媒体类型设置为 JSON。 ——
    猜你喜欢
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2014-08-04
    • 2018-01-16
    相关资源
    最近更新 更多