2013-04-23 81 views
1

我正在使用Spring 3.2.1并且有一个PropertyEditorSupport来强制一个参数我想自动转换为一个枚举为大写,以便它转换错误的参数。如果参数String不能转换为枚举,则可以抛出IllegalArgumentException。我的问题是当它应该是400时,状态码返回为500.我创建了一个ResponseEntityExceptionHandler注释为@ControllerAdvice,并且注释了方法@ExceptionHandler (IllegalArgumentException.class),打算在那里设置状态码,但是当异常是抛出。为什么不?这是否与此处讨论的问题相同,MaxUploadSizeExceededException doesn't invoke the exception handling method in Spring?即ControllerAdvice ExceptionHandler未从PropertyEditorSupport调用

” ...的异常被抛出的要求已达到 调度的servlet之前。因此您的ExceptionHandler不是因为在该点的异常被抛出的目标控制器称为 已 尚未确定“。

如果是的话我该如何返回正确的状态码?

回答

0

短版:

@ExceptionHandler(Exception)注释方法@Controller类。


加长版:

我注意到,如果XxxException进入匹配@RequestMapping方法“之后”发生在@ControllerAdvice类的@ExceptionHandler(XxxException.class)注解的方法才会被调用。

MaxUploadSizeExceededExceptionMethodArgumentNotValidException这样的条件将导致SpringMVC不输入@RequestMapping方法,所以建议不适用。

我的解决方案是在实际的控制器类中可悲地将@ExceptionHandler(XxxException.class)注释的方法。不好但工作。

希望这会有所帮助。如果有人知道更好的解决方案(使用@ControllerAdvice时),请分享。

相关问题