SpringMVC在没有请求映射时如何处理异常?
当控制器中的所有请求映射与传入请求不匹配时会发生什么情况?我正在使用exceptionhandler捕获Exception.class,但它似乎没有捕获它?有人能解释吗?根据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
处理控制器执行期间发生的意外异常。在传入请求与任何请求映射都不匹配的情况下,甚至不会执行控制器方法
基于Servlet技术的springmvc。所有传入的请求都将由DispatcherServlet
(在web.xml
中注册的)处理DispatcherServlet
查找可以处理当前请求的处理程序。如果找不到合适的处理程序(即找不到合适的映射控制器方法),DispatcherServlet
启动404错误。
当发生错误时,web容器(Tomcat或任何其他servlet容器)生成包含异常消息的默认页面。但是您也可以指定容器应该为给定的异常返回特定的错误页。要手动处理此错误,您应将其添加到web.xml
newerror 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:的,并且如果您使用的是SpringBootDefinebeanEmbeddedServletContainerCustomizer
,并且存在配置错误页面,那么您将在controller中处理该错误。
@Controller
public class ExceptionController{
@RequestMapping("/page-not-found")
public ModelAndView pageNotFound(){
return new ModelAndView("page-not-found");
}
}