我的api有一个带有@ControllerAdvice注释的类,并有一些中心异常处理。它处理的异常之一是MethodArgumentNotValidException,当一个带有@Valid注解的请求方法参数失败时,它将被抛出。
在我的应用程序中,我还有一个CORS拦截器设置,它在请求成功时将“访问控制-允许-原产地”头添加到servlet响应中。但是,当使用@Valid注释的参数验证失败时,我的拦截器就会被绕过。我的异常处理程序需要为无效的表单字段发送错误信息,以便在浏览器中处理它们。
只是想知道当抛出异常时,我的拦截器是否会被绕过,或者我是否缺少了@ControllerAdvice类中的一些配置。
发布于 2013-12-12 19:07:55
这确实是正常的行为。
来自HandlerInterceptor.postHandle的javadoc
拦截处理程序的执行。在
HandlerAdapter实际调用处理程序之后调用,但在DispatcherServlet呈现视图之前调用。可以通过给定的ModelAndView向视图公开其他模型对象。DispatcherServlet在执行链中处理一个处理程序,该处理程序由任意数量的拦截器组成,最后是处理程序本身。使用该方法,每个拦截器都可以对执行进行后处理,并按执行链的相反顺序应用。
可以说,在实际调用方法之前抛出了MethodArgumentNotValidException,在准备实际的方法调用时会调用它。实际上,只有在成功地执行/调用方法之后才执行postHandle。在异常情况下,只调用preHandle和afterCompletion方法。
https://stackoverflow.com/questions/20551888
复制相似问题