我正在使用Spring 3.2.1并且有一个PropertyEditorSupport
来强制一个我想自动转换为enum的参数为大写,以便它转换错误的参数。如果参数String无法转换为枚举,则可以抛出IllegalArgumentException
。我的问题是状态代码在应该为400时返回为500.我创建了ResponseEntityExceptionHandler
注释@ControllerAdvice
并使用注释@ExceptionHandler (IllegalArgumentException.class)
的方法,打算设置状态代码在那里,但抛出异常时从不调用该方法。为什么不?是否与此处讨论的问题相同,MaxUploadSizeExceededException doesn't invoke the exception handling method in Spring?即
“...在请求到达之前抛出异常 调度员servlet。因此,不会调用异常处理程序 因为在抛出异常时,目标控制器具有 还有待确定。“
如果是,我该如何返回正确的状态代码?
答案 0 :(得分:0)
简短版本:
在@ExceptionHandler(Exception)
类中添加@Controller
带注释的方法。
更长的版本:
我注意到@ExceptionHandler(XxxException.class)
类中的@ControllerAdvice
带注释的方法只有在“{1}}”在输入匹配XxxException
的方法后发生时才会被调用。
@RequestMapping
和MaxUploadSizeExceededException
等条件会导致SpringMVC无法输入MethodArgumentNotValidException
方法,因此不会应用建议。
我的解决方案是遗憾地将@RequestMapping
带注释的方法放在实际的控制器类中。不好,但有效。
希望这会有所帮助。如果有人知道更好的解决方案(使用@ExceptionHandler(XxxException.class)
时),请分享。