我在 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/