【问题标题】:Can I have a catch all not matched requests using Spring DispatcherServlet我可以使用 Spring DispatcherServlet 捕获所有不匹配的请求吗
【发布时间】:2011-02-02 09:05:43
【问题描述】:

我正在为一个项目使用 Spring MVC,并且我正在使用 Spring DispatcherServlet 将进入应用程序的请求映射到在其他地方编写的控制器。如果请求没有映射到任何现有的控制器视图映射,我正在寻找一种方法来拥有默认处理程序(一个捕获所有处理程序)。这当前显示了一个 Resource not found 异常,但我想知道在 Spring 中是否可以使用 catch all unmatched requests 功能。

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

    Spring MVC 中的每个HandlerMapping 策略都有a defaultHandler property 用于此目的。

    如果您的 Spring 配置已经明确指定了 HandlerMapping 对象(例如 SimpleUrlHandlerMapping),这很容易,但如果您依赖默认设置为您提供 HandlerMapping,则不太明显。

    例如,如果您使用带注释的控制器,那么您可能会使用 Spring 自动提供的默认声明 DefaultAnnotationHandlerMapping。但是,您可以提供自己的 bean 来覆盖默认值:

    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
       <property name="defaultHandler" ref="myDefaultHandler"/>
    </bean>
    

    同样的模式适用于任何Handlermapping 类型,只需替换类名即可。

    【讨论】:

    • 你引用的类需要是Controller的实现吗?还是可以注释为Controller?我做了后者,并添加了一个 handleRequest(HttpServletRequest request, HttpServletResponse response) 方法,它似乎没有调用它。我不断收到 400 响应,它在语法上不正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2012-10-23
    • 2016-08-04
    • 1970-01-01
    • 2013-11-19
    • 2019-02-09
    • 1970-01-01
    相关资源
    最近更新 更多