我认为这个问题对于异常来说是通用的,但让我们使用我的例子。
成功登录后,我有以下简单的 Controller 用于“用户主页”页面。
@Controller
@RequestMapping("/user-home")
public class UserHomeController {
private static Log log = LogFactory.getLog(UserHomeController.class);
@RequestMapping(method = RequestMethod.GET)
public String getUserHome(HttpServletRequest request) {
if (request.getSession(false) == null) {
throw new UnauthorizedClientException("Could not authenticate request. There is no session present for this request.");
} else {
return "user_home";
}
}
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler({UnauthorizedClientException.class})
public void handle404() {
log.info("An UnauthorizedClientException was thrown inside UserHomeController.");
}
}
所以,它有效,即,当没有 session 存在时,我得到默认的 404 页面,但我传递到 UnauthorizedClientException 的消息却找不到。 404 页面有“Message:”,后面没有任何内容。
我的消息去哪儿了?传递给异常构造函数的消息通常的目的是什么?
最佳答案
您误解了 UnauthorizedClientException
的用途。它不是为您呈现页面,它只是用于内部控制流。
当您引发该异常时,Spring 会捕获它,并将其传递给 handle404()
方法。该方法又负责相应地处理异常。
@ExceptionHandler
带注释的方法在几乎所有方面都与 @RequestMapping
方法相似。这意味着如果要发生任何有用的事情,他们必须返回 View 和模型。
但是,您的方法所做的只是将异常消息记录到其内部记录器,然后返回。它不返回 View ,因此默认错误页面不会呈现任何异常;并且它不返回模型,因此不会显示任何消息。
您需要更改 handle404()
方法以 (a) 返回要呈现的 JSP 的名称,以及 (b) 将适当的消息添加到模型中。
关于java - Spring异常消息?它是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4986089/