本文介绍了无法使用 Spring RestTemplate 使用 JSON 数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用 Spring 的 RestTemplate HTTP 客户端从已发布的 RESTful URL(简单的 HTTP GET)填充 DTO.
Am trying to populate a DTO from a published RESTful URL (simple HTTP GET) by using Spring's RestTemplate HTTP Client.
这是我尝试使用的已发布 JSON 的内容:
This is the content of the published JSON that I am trying to consume:
[{"startDate":"2017-01-29","cost":"$50000.00","id":1112,"name":"Porsche"},{"startDate":"2017-03-06","cost":"$27000.00","id":38626,"name":"BMW"}]我的 DTO:
class DTO { private String startDate; private String cost; private String name; // Getters and Setters }我的响应对象:
public class Response { private static final STRING = "www.sample/product"; public static List<Object> getCampaigns() { RestTemplate restTemplate = new RestTemplate(); ResponseEntity<Object[]> responseEntity = (ResponseEntity) restTemplate.getForEntity(URL, Object[].class); Object[] objects = responseEntity.getBody(); MediaType contentType = responseEntity.getHeaders().getContentType(); HttpStatus statusCode = responseEntity.getStatusCode(); return Arrays.asList(objects); } public void static main (String args []) { List<Object> dtos = getCampaigns(); for (Object dto : dtos) { System.out.println(dto.toString()); } } }这是我的 pom.xml:
Here's my pom.xml:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.7</version> </dependency> </dependencies>当我在 Response 中运行 main() 方法时,出现以下异常:
When I run the main() method inside Response, I get the following exception:
00:24:14.191 [main] DEBUG org.springframework.web.client.RestTemplate - GET request for "www.sample/product" resulted in 200 (OK) Exception in thread "main" org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class [Ljava.lang.Object;] and content type [application/json;charset=utf-8] at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:109) at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:917) at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:901) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:655) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613) at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:312)我可能做错了什么?
推荐答案试试这个
public class Response { private static final String URL = "www.sample/product"; public static List<DTO> getCampaigns() { RestTemplate restTemplate = new RestTemplate(); ResponseEntity<DTO[]> responseEntity = restTemplate.getForEntity(URL, DTO[].class); DTO[] objects = responseEntity.getBody(); MediaType contentType = responseEntity.getHeaders().getContentType(); HttpStatus statusCode = responseEntity.getStatusCode(); return Arrays.asList(objects); } public void static main (String args []) { List<DTO> dtos = getCampaigns(); for (DTO dto : dtos) { System.out.println(dto.toString()); } } }更多推荐
无法使用 Spring RestTemplate 使用 JSON 数组
发布评论