java - 在 Spring 中处理嵌套 REST 资源调用的更优雅的方式?

标签 java spring rest resttemplate

我在 Spring Controller 中使用外部 REST api,并且必须在返回模型之前聚合一些调用来填充我的模型。假设我的模型如下所示:

public class MyModel{
  public String id;
  public String field1;
  public String field2;
}

我正在使用的 API 提供一次调用来获取所有可用对象 GET/objects 的 ID 列表以及一些必需字段。

[
    {
      "id": "some_id_1",
      "field1": "some_value_1"
    },
    {
      "id": "some_id_2",
      "field1": "some_value_2"
    }
]

API 现在为我提供了第二次调用 GET/object/{id} 来获取包含所有字段的对象版本。

//GET /object/some_id_1
{
  "id": "some_id_1",
  "field1": "some_value_1",
  "field2": "some_other_value_1"
}

不可能在列表调用中获取对象的扩展版本。

我正在使用 RestTemplate 和 jackson,我想知道是否有更好的方法来构建列表来构建此列表的扩展版本,而不是先调用 then list 方法,然后遍历所有 Id,调用详细资源并将结果附加到列表中。当然,我知道我无法减少剩余调用的实际数量,只是想知道是否有更优雅的方法在 Spring 中编写它(也许带有注释等)。

List<MyModel> result = new List<>();
MyModel[] models = restTemplate.getForObject("/objects", MyModel[].class);
for(MyModel slimModel: models){
  MyModel fatModel = restTemplate.getForObject("/object/{id}", MyModel.class, slimModel.id);
  result.add(fatModel);
}
return result;

最佳答案

你可以尝试这样的事情:

List<MyModel> result = Arrays.asList(restTemplate.getForObject("/objects", MyModel[].class));

关于java - 在 Spring 中处理嵌套 REST 资源调用的更优雅的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42835377/

相关文章:

version - 如何从 Java 代码中知道 JDK 版本

java - 从 Gradle 依赖项中排除包

php - 整理 REST API 请求的 Htaccess 规则

java - 通过浏览器运行服务时,config、properties 文件不会实时更新

调用 WSDL 服务时出现 javax.xml.ws.WebServiceException

java - Websphere Application Server 配置文件和 WAS 版本之间的差异

java - Spring Boot - 确定子域(带通配符)?

java - 创建名称为 'entityManagerFactoryBean' 的 bean 时出错

java - JAX-WS 连接不会关闭,并在 x 条消息后停止消息传递

java - 从 C 代码设置/获取 Java List<>