由於沒有人似乎有一個很好的方式來實現這一目標,我添加了我的解決方案(不是最好的),以防其他人有類似的需求。我得到RestTemplate,並簡單地做出許多請求,並將它們合併到我自己,然後返回組合數據作爲spiceRequest的結果。
當我找到一個更好的方法,但現在它完成這項工作時,我會替換此代碼。
public class LargeSpiceRequest extends SpringAndroidSpiceRequest<LargeResponse>{
private String mUrl;
public LargeSpiceRequest(String url) {
super(LargeResponse.class);
mUrl = url;
}
@Override
public LargeResponse loadDataFromNetwork() throws Exception {
RestTemplate restTemplate = getRestTemplate();
ResponseEntity<LargeResponse> largeResponseResponseEntity = restTemplate.exchange(URI.create(mUrl), HttpMethod.GET, null, LargeResponse.class);
LargeResponse largeResponse = largeResponseResponseEntity.getBody();
ArrayList<SubRequest> subRequests = largeResponse.getSubRequests();
for(SubRequest subRequest : subRequests){
try{
String url = subRequest.getUrl();
ResponseEntity<SubRequestResponse> subRequestResponseEntity = restTemplate.exchange(URI.create(url), HttpMethod.GET, null, SubRequestResponse.class);
SubRequestResponse subRequestResponse = subRequestResponseEntity.getBody();
// merge somethingResponse with largeResponse
largeResponse.mergeIn(subRequestResponse);
} catch (RestClientException e) {
// Handle this if you want
}
}
// the merged largeResponse will be stored in the cache
return largeResponse;
}
}
你這樣做的方式很好。只要一點:永遠不要發現異常,不要做任何事情。至少,記錄異常情況,否則就像切斷你坐的分支一樣,這會導致你無法發現和解決的神祕錯誤。自我接受你的答案,這是值得的。 – Snicolas
這只是演示代碼來說明我如何「解決」它,真正的實現具有適當的錯誤處理。 –