[英]Jersey WebApplicationException and servlet filters
在我的應用程序中,我為異常情況拋出 WebApplicationExceptions,以便我可以用我的 500 傳回好的消息。 我遇到的問題是我有一個用於 hibernate 事務的 servlet 過濾器,並且注意到 WebApplicationException 在返回到 servlet 過濾器之前被捕獲。 我已經包含了一個簡短版本的 servlet 過濾器作為示例。 注意:我只有另一個 servlet 過濾器,它進行身份驗證並且沒有捕獲
try {
em = MauiPersistenceUtil.getEntityManager();
em.getTransaction().begin();
// raises WebApplicationException
filterChain.doFilter(request, response);
// since WebApplicationException is trapped somewhere else up
// the filterChain bad data is committed here
em.getTransaction().commit();
} catch (Throwable ex) {
// I want the WebApplicationException to reach here
em.getTransaction().rollback();
}
謝謝,贖金
編輯:瑞安斯圖爾特指出我實際上並沒有問過問題。 我的問題是:如何在 servlet 過濾器中判斷 web 應用程序異常在 filterChain 中被拋出? 我期待 Jersey 會重新拋出異常,但這是不正確的。
既然你沒有問具體的問題,我會做一些觀察。
您應該檢查“doFilter”之后的響應狀態:
filterChain.doFilter(servletRequest, servletResponse);
Integer status = ((HttpServletResponse) servletResponse).getStatus();
if (HttpServletResponse.SC_INTERNAL_SERVER_ERROR.equals(status) {
em.getTransaction().rollback();
} else {
em.getTransaction().commit();
}
如果 Status 為 500 則回滾,就這么簡單。 您永遠不會在 Servlet 過濾器上遇到 WebApplicationException,它們會被 Jersey Servlet 捕獲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.