我正在嘗試處理由JSP視圖引發的異常。由於Spring MVC無法直接處理這些異常,因爲它們被拋出了控制器的範圍,我試圖通過HandlerInterceptorAdapter
來處理它們。在JSP異常完成視圖呈現後重定向
afterCompletion
方法使我可以訪問從JSP引發的Exception,因此我可以使用唯一的錯誤ID記錄異常。但除此之外,我想向用戶顯示一個用戶友好的錯誤頁面。所以我的第一個想法是將用戶重定向到我現有的錯誤頁面,該頁面顯示了唯一的錯誤ID。
但似乎重定向被忽略。在這個方法中可以做重定向嗎?或者是不可能改變回應,因爲它已經被渲染了?
這是我第一次嘗試:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import de.lwv.mass2.client.web.controller.BasicExceptionHandlerController;
@Component
public class JspExceptionHandler extends HandlerInterceptorAdapter {
private static Logger LOGGER = LoggerFactory.getLogger(JspExceptionHandler.class);
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
if (ex != null) {
final String uuid = BasicExceptionHandlerController.generateExceptionUUID();
LOGGER.error("Exception: " + uuid, ex);
// redirect
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
response.sendRedirect(request.getContextPath() + "/error?id=" + uuid);
}
}
}
我有同樣的問題.. – mainlove