RestTemplate postForEntity return DTO 列表
RestTemplate postForEntity return List of DTO
我在一个 spring 项目中工作,并使用重新模板调用 POST API 获取 DTOOne 列表和 return DTOTWO 列表。
这是我的代码:
List<MYDTOONE> listDTORequest;
//values..
ResponseEntity<List<MYDTOOTWO>> userActionsResponse = restTemplate.postForEntity("my yrl",
listDTORequest, MYDTOOTWO.class);
我在最后一个参数中遇到语法错误,我需要知道如何告诉 postForEntity 我在等待列表。
我在最后一个参数中也尝试了 List<MYDTOOTWO>
但仍然存在语法错误
提前致谢。
您可以尝试使用以下 new ParameterizedTypeReference<List< MyDtoTwo>>() {}
而不是 MYDTOOTWO.class(为便于阅读而编写的 MyDtoTwo)和 exchange
方法(更新:postForEntity 已删除 parameterizedTypeReference)。
在您的情况下,您返回的响应被解析为 MYDTOOTWO.class,但是您试图将结果解释为列表,从而导致不匹配。使用参数化类型引用,您可以指定您期望 MYDTOOTWO.class 的列表。
您的电话应该是:
ResponseEntity<List<MYDTOOTWO>> userActionsResponse = exchange("my yrl", HttpMethod.POST,
listDTORequest, new ParameterizedTypeReference<List< MYDTOOTWO>>() {});
List<MYDTOTWO> body = userActionsResponse.getBody();
更新(按照 OP 的建议):
如果您注意到,您将需要在发出 POST 请求时发送 HttpMethod.POST(作为第二个参数)并将您的 headers 和请求数据包装在 HttpEntity requestEntity object 中如下:
HttpEntity<Object> requestEntity = new HttpEntity<>(listDTORequest, headers);
它可能不是最干净的代码,但它是我发现的最快、最简单的方法。你把它读成一个数组,然后把它放在列表中。
List<MYDTOONE> listDTORequest;
// JDK8
List<MYDTOOTWO> userActionsResponse = Arrays.asList(restTemplate.postForEntity("my url", listDTORequest, MYDTOOTWO[].class).getBody());
// JDK9+
List<MYDTOOTWO> userActionsResponse = List.of(restTemplate.postForEntity("my url", listDTORequest, MYDTOOTWO[].class).getBody());
我在一个 spring 项目中工作,并使用重新模板调用 POST API 获取 DTOOne 列表和 return DTOTWO 列表。
这是我的代码:
List<MYDTOONE> listDTORequest;
//values..
ResponseEntity<List<MYDTOOTWO>> userActionsResponse = restTemplate.postForEntity("my yrl",
listDTORequest, MYDTOOTWO.class);
我在最后一个参数中遇到语法错误,我需要知道如何告诉 postForEntity 我在等待列表。
我在最后一个参数中也尝试了 List<MYDTOOTWO>
但仍然存在语法错误
提前致谢。
您可以尝试使用以下 new ParameterizedTypeReference<List< MyDtoTwo>>() {}
而不是 MYDTOOTWO.class(为便于阅读而编写的 MyDtoTwo)和 exchange
方法(更新:postForEntity 已删除 parameterizedTypeReference)。
在您的情况下,您返回的响应被解析为 MYDTOOTWO.class,但是您试图将结果解释为列表,从而导致不匹配。使用参数化类型引用,您可以指定您期望 MYDTOOTWO.class 的列表。
您的电话应该是:
ResponseEntity<List<MYDTOOTWO>> userActionsResponse = exchange("my yrl", HttpMethod.POST,
listDTORequest, new ParameterizedTypeReference<List< MYDTOOTWO>>() {});
List<MYDTOTWO> body = userActionsResponse.getBody();
更新(按照 OP 的建议): 如果您注意到,您将需要在发出 POST 请求时发送 HttpMethod.POST(作为第二个参数)并将您的 headers 和请求数据包装在 HttpEntity requestEntity object 中如下:
HttpEntity<Object> requestEntity = new HttpEntity<>(listDTORequest, headers);
它可能不是最干净的代码,但它是我发现的最快、最简单的方法。你把它读成一个数组,然后把它放在列表中。
List<MYDTOONE> listDTORequest;
// JDK8
List<MYDTOOTWO> userActionsResponse = Arrays.asList(restTemplate.postForEntity("my url", listDTORequest, MYDTOOTWO[].class).getBody());
// JDK9+
List<MYDTOOTWO> userActionsResponse = List.of(restTemplate.postForEntity("my url", listDTORequest, MYDTOOTWO[].class).getBody());