【发布时间】:2013-11-26 22:51:08
【问题描述】:
我正在尝试处理 JSP 视图抛出的异常。由于 Spring MVC 无法直接处理这些异常,因为它们超出了控制器的范围,因此我尝试通过 HandlerInterceptorAdapter 处理它们。
afterCompletion 方法让我可以访问从 JSP 抛出的异常,因此我可以使用唯一的错误 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);
}
}
}
【问题讨论】:
-
我也有同样的问题..
标签: jsp spring-mvc interceptor