Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @ControllerAdvice方法似乎绕过了拦截器_Java_Spring_Spring Mvc - Fatal编程技术网

Java @ControllerAdvice方法似乎绕过了拦截器

Java @ControllerAdvice方法似乎绕过了拦截器,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有一个用@ControllerAdvice注释的类,它为我的api提供了一些中央异常处理。它处理的异常之一是MethodArgumentNotValidException,当使用@Valid注释的请求方法参数验证失败时,会引发该异常 在我的应用程序中,我还有一个CORS拦截器设置,当请求成功时,它会将“访问控制允许源”头添加到servlet响应中。然而,当对带有@Valid注释的参数进行验证失败时,我的拦截器似乎被绕过。我的异常处理程序需要发回无效表单字段的错误信息,以便在浏览器中处理它们 我

我有一个用
@ControllerAdvice
注释的类,它为我的api提供了一些中央异常处理。它处理的异常之一是
MethodArgumentNotValidException
,当使用
@Valid
注释的请求方法参数验证失败时,会引发该异常

在我的应用程序中,我还有一个CORS拦截器设置,当请求成功时,它会将“访问控制允许源”头添加到servlet响应中。然而,当对带有
@Valid
注释的参数进行验证失败时,我的拦截器似乎被绕过。我的异常处理程序需要发回无效表单字段的错误信息,以便在浏览器中处理它们


我只是想知道,当抛出异常时,我的拦截器是否会被绕过,或者我是否缺少
@ControllerAdvice
类中的某些配置。

这确实是正常行为

来自

拦截处理程序的执行。在
handleAdapter
实际调用处理程序之后调用,但在
DispatcherServlet
呈现视图之前调用。可以通过给定的
ModelAndView
向视图公开其他模型对象。
DispatcherServlet
处理执行链中的处理程序,该执行链由任意数量的拦截器组成,处理程序本身位于末尾。通过这种方法,每个拦截器都可以对执行进行后处理,以执行链的相反顺序应用


可以说,
MethodArgumentNotValidException
是在实际调用方法之前抛出的,它是在准备实际的方法调用时调用的。实际上,
postHandle
仅在成功执行/调用该方法后执行。如果出现异常,只调用
预处理
完成后
方法。

谢谢,但我认为这不是重复的。我已经按照那篇文章的回复中描述的方式处理了我的异常。我的问题更多的是CORS请求问题,当我的异常处理程序被调用时,我的拦截器没有装饰servlet响应。谢谢!我确实实现了postHandle方法。我更改了代码以实现preHandle方法,现在在引发异常的情况下将头成功添加到响应中。