我在 Spring MVC Controller 中有一个简单的 REST 方法,如下所示,其签名为:
@RequestMapping(value="/person/{personId}", method=RequestMethod.GET) public @ResponseBody Object 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 方法被正确调用并工作。
最佳答案
你可以试试这个:
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 .
希望有所帮助
关于java - Spring RESTTemplate getForObject 方法不支持返回内容类型 'null',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24501590/