java - Spring异常消息?它是什么?

标签 java spring exception tomcat http-status-code-404

我认为这个问题对于异常来说是通用的,但让我们使用我的例子。

成功登录后,我有以下简单的 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/

相关文章:

java - 我如何使用 Spring 启用 Tomcat 阀

java - 如何通过 Android Facebook API 使用基于光标的分页

java - EditText 检查输入是否从 0 到 9 并显示 toast ?

java - Spring中的抽象方法错误

Android Studio 2.1.2 渲染问题。 VectorDrawable_Delegate.nDraw

java - Spring XSD的访问报错

java - 什么是堆栈溢出错误?

java - 自定义 ForkJoinPool 中的嵌套 ArrayList.ParallelStream() 使用线程不均匀

java - 通过 ID 动态获取可绘制对象

java - 为什么我从 Tomcat 7 收到 404 请求的资源不可用错误