现在我有一个方面:
@Around(value = "execution(* package.controller.*.*View(..)) && args(.., request)")
public ModelAndView getUserProfile(ProceedingJoinPoint proceedingJoinPoint, HttpServletRequest request) throws Throwable {
ModelAndView view = null;
view = (ModelAndView) proceedingJoinPoint.proceed();
HttpSession session = request.getSession();
boolean isLoggedIn = isLoggedIn(session);
if ( isLoggedIn ) {
User user = (User)session.getAttribute("user");
view.addObject("isLogin", isLoggedIn)
.addObject("profile", user);
}
return view;
}
如您所见,一旦调用* View方法,此方面将向ModelAndView对象添加会话信息。
但是,当发生HTTP 404错误时,此方面无法正常工作。 但是如何在404错误页面上向ModelAndView对象添加额外信息?
我为404错误创建了自己的错误页面:
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/views/errors/404.jsp</location>
</error-page>
非常感谢。
答案 0 :(得分:1)
您可以在控制器中使用@ExceptionHandler
来处理错误并向ModelAndView
添加额外信息。只要出现错误,就会调用此方法,并允许您修改响应。
这是一个来自Spring博客的好例子: http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
@ExceptionHandler(Exception.class)
public ModelAndView handleError(HttpServletRequest req, Exception exception) {
logger.error("Request: " + req.getRequestURL() + " raised " + exception);
ModelAndView mav = new ModelAndView();
mav.addObject("exception", exception);
mav.addObject("url", req.getRequestURL());
mav.setViewName("error");
return mav;
}