SpringMVC在没有请求映射时如何处理异常?

SpringMVC在没有请求映射时如何处理异常?,spring,exception,model-view-controller,error-handling,exception-handling,Spring,Exception,Model View Controller,Error Handling,Exception Handling,当控制器中的所有请求映射与传入请求不匹配时会发生什么情况?我正在使用exceptionhandler捕获Exception.class,但它似乎没有捕获它?有人能解释吗?根据@ExceptionHandler处理控制器执行期间发生的意外异常。在传入请求与任何请求映射都不匹配的情况下,甚至不会执行控制器方法 基于Servlet技术的springmvc。所有传入的请求都将由DispatcherServlet(在web.xml中注册的)处理DispatcherServlet查找可以处理当前请求的处理程

当控制器中的所有请求映射与传入请求不匹配时会发生什么情况?我正在使用exceptionhandler捕获Exception.class,但它似乎没有捕获它?有人能解释吗?

根据
@ExceptionHandler
处理控制器执行期间发生的意外异常。在传入请求与任何请求映射都不匹配的情况下,甚至不会执行控制器方法

基于Servlet技术的springmvc。所有传入的请求都将由
DispatcherServlet
(在
web.xml
中注册的)处理
DispatcherServlet
查找可以处理当前请求的处理程序。如果找不到合适的处理程序(即找不到合适的映射控制器方法),
DispatcherServlet
启动404错误。 当发生错误时,web容器(Tomcat或任何其他servlet容器)生成包含异常消息的默认页面。但是您也可以指定容器应该为给定的异常返回特定的错误页。要手动处理此错误,您应将其添加到
web.xml
new
error page
元素中,该元素将允许您将错误代码映射到url:

...

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<error-page>
    <error-code>404</error-code>
    <location>/page-not-found</location>
</error-page>

...

现在只需创建名为
page not found.jsp的视图,并根据需要显示异常信息。

如果您有两个映射,一个用于root
/
,另一个用于say
/api
,它将进行最接近的匹配。只有api将由/api处理,但/和其他api将匹配我相信的根。然后你可以处理任何你喜欢的事情。你试过了吗?是的,目前它正在执行GET请求,但是因为没有相应的映射(都是请求后映射),我想知道如果我正确理解你的意思,如何捕获错误/异常(无论导致HTTP 400页面的是什么),而不执行GET请求映射。如果出现未映射的请求,结果将是一个带有404状态代码的页面。可能您没有正确地实现处理程序。如果您的项目包含web.xml,您可以使用
标记配置它;如果它是基于注释配置视图相关post:的,并且如果您使用的是SpringBootDefinebean
EmbeddedServletContainerCustomizer
,并且存在配置错误页面,那么您将在controller中处理该错误。
@Controller
public class ExceptionController{

    @RequestMapping("/page-not-found")
    public ModelAndView pageNotFound(){
        return new ModelAndView("page-not-found");
    }

}