【问题标题】:ControllerAdvice ExceptionHandler not called from PropertyEditorSupport未从 PropertyEditorSupport 调用 ControllerAdvice ExceptionHandler
【发布时间】:2013-04-16 20:23:57
【问题描述】:

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

"...在请求到达之前抛出异常 调度程序 servlet。因此不会调用您的异常处理程序 因为在抛出异常时,目标控制器已经 尚未确定。”

如果是这样,我怎样才能返回正确的状态码?

【问题讨论】:

    标签: spring spring-mvc exception-handling


    【解决方案1】:

    短版:

    @ExceptionHandler(Exception)注解的方法放到@Controller类中。


    加长版:

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

    MaxUploadSizeExceededExceptionMethodArgumentNotValidException 之类的条件会导致 SpringMVC 无法进入 @RequestMapping 方法,因此不会应用建议。

    我的解决方案是遗憾地将 @ExceptionHandler(XxxException.class) 带注释的方法放在实际的控制器类中。不好但有效。

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

    【讨论】:

      猜你喜欢
      • 2021-05-22
      • 1970-01-01
      • 2021-03-24
      • 2012-06-02
      • 1970-01-01
      • 2014-04-05
      • 2016-08-01
      • 2017-03-21
      • 1970-01-01
      相关资源
      最近更新 更多