我的RSS小服務程序爲和HttpServletResponse
使用try-with-resource。在某些情況下SomeException
被拋出,而生成RSS文件,在這種情況下,我需要一個HTTP狀態500返回給客戶端:try-with-resource vs java.lang.IllegalStateException:在提交響應後無法調用sendError()
try (ServletOutputStream out = response.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf-8")) {
response.setContentType("text/xml");
// Generate RSS here
} catch (SomeException e) {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
return;
}
然而,response.sendError()
叫的時候,$出$已達關閉,我得到說IllegalStateException
說,響應已被提交(關閉流似乎自動提交響應)。
如果我移動try-block外部的out
和writer
的初始化,並以finally-block(Java7之前的方式)關閉它們,則會正確發送錯誤代碼。
我想知道是否有辦法繼續使用try-with-resource,如果發生異常,仍然能夠返回錯誤代碼。
謝謝!
您可以使用_outer_ try-with-resources和_inner_ try-catch ... – jtahlborn