我使用Spring3.2.1,并有一个PropertyEditorSupport
来强制使用我希望自动转换为enum的参数为大写,这样它就可以转换错误的大小写参数。如果参数字符串不能转换为枚举,则可以引发IllegalArgumentException
。我的问题是,当状态码应该是400时,状态代码被返回为500。我创建了一个带有@ControllerAdvice
注解的@ControllerAdvice
和一个带有@ExceptionHandler (IllegalArgumentException.class)
注释的方法,目的是在那里设置状态代码,但是当抛出异常时,永远不会调用该方法。为什么不行?MaxUploadSizeExceededException doesn't invoke the exception handling method in Spring,这和这里讨论的问题相同吗?即
“在请求到达dispatcher servlet之前抛出...the异常。因此不调用异常处理程序,因为在抛出异常时,目标控制器尚未确定。”
如果是这样,我如何返回正确的状态代码?
发布于 2013-12-17 06:45:14
简短版本:
将@ExceptionHandler(Exception)
注释的方法放在@Controller
类中。
较长版本:
我注意到,只有在“使用匹配的@ExceptionHandler(XxxException.class)
输入方法”之后发生XxxException
时,才会调用@ControllerAdvice
类中的XxxException
注释方法。
像MaxUploadSizeExceededException
和MethodArgumentNotValidException
这样的条件将导致SpringMVC不进入@RequestMapping
方法,因此不应用通知。
我的解决方案是将@ExceptionHandler(XxxException.class)
注释的方法不幸地放在实际的控制器类中。不太好但很管用。
希望这能有所帮助。如果有人知道更好的解决方案(当使用@ControllerAdvice
时),请共享。
https://stackoverflow.com/questions/16172437
复制相似问题