我有一個非常簡單的控制器操作來訪問服務層,並最終返回一個巨大的響應。響應被部分地發送,但是,在隨機的地方,最終看起來像這樣:Spring REST巨大的響應導致響應編寫器被多次調用
...,"dimensions":{"width":400,"height":394},"hostedAtS3":true},"
,我得到以下異常:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
對於這一個控制器死簡單:
@JsonView(value = StickerPackView.Admin.class)
@ApiOperation(value = "[ADMIN] Lists all categories regardless visibility", response = StickerCategory.class)
@RequestMapping(value = "/categories/all", method = RequestMethod.GET)
public ResponseEntity getCategories(Principal principal) {
return new ResponseEntity(stickerService.getAllCategories(), OK);
}
我試過的第一件事就是讓它DeferredResult
或Callable
認爲可能需要更長時間才能生成響應。不幸的是,事實並非如此。當我離開這個方法並返回一些較小的響應時 - 比如單個類別 - 就沒問題。
我不知道如何處理它。這裏是full stacktrace。
好吧。關於控制器沒有太多的展示。這裏的情況是需要傳輸給客戶端的數據量。我已經看到在單一請求中返回更多數據的服務,但事實上 - 將這種巨大的響應分離爲較小的響應+ HATEOAS以幫助那些正在實施此api的人員走動資源是一種可接受的解決方法。 – Mateusz