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