ControllerAdvice ExceptionHandler未从PropertyEditorSupport调用

时间:2013-04-23 14:48:01

标签: spring spring-mvc exception-handling

我正在使用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。因此,不会调用异常处理程序   因为在抛出异常时,目标控制器具有   还有待确定。“

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

1 个答案:

答案 0 :(得分:0)

简短版本:

@ExceptionHandler(Exception)类中添加@Controller带注释的方法。


更长的版本:

我注意到@ExceptionHandler(XxxException.class)类中的@ControllerAdvice带注释的方法只有在“{1}}”在输入匹配XxxException的方法后发生时才会被调用。

@RequestMappingMaxUploadSizeExceededException等条件会导致SpringMVC无法输入MethodArgumentNotValidException方法,因此不会应用建议。

我的解决方案是遗憾地将@RequestMapping带注释的方法放在实际的控制器类中。不好,但有效。

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