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

时间:2017-03-16 13:24:00

标签: java spring rest resttemplate

我在Spring控制器中使用外部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和杰克逊一样,我想知道是否有更好的方法来构建一个构建此列表的扩展版本的列表,而不是先调用然后列出方法然后预测所有的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;

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

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