Spring3 @ExceptionHandler for ServletRequestBindingException

前端 未结 4 1426
醉话见心
醉话见心 2020-12-11 08:10

I am using a Default AnnotationMethodHandlerAdapter which I believe should enable support for @ExceptionHandler. Unluckily, a ServletRequestBindingException is thrown if a c

相关标签:
4条回答
  • 2020-12-11 08:38

    you cannot handle it with spring custom implementation.

    it may not an elegant solution but you still can catch it with web.xml <error-page> tag. you can catch exception type or error code from here.

    0 讨论(0)
  • 2020-12-11 08:40

    Unfortunately, @ExceptionHandler methods are only invoked for exceptions that are thrown from within the handler method. ServletRequestBindingException is an infrastructure exception that is thrown whilst trying to invoke a handler method, and if the handler method itself cannot be invoked for whatever reason, then the @ExceptionHandler is not used.

    There doesn't really seem to be a nicer way to handle this. Without knowing what's causing your ServletRequestBindingException, though, it's hard to advise.

    0 讨论(0)
  • 2020-12-11 08:48

    Aaand thanks to Juergen Hoeller this has been solved today and should appear in Spring 4.3.

    Please refer to the issue: https://jira.spring.io/browse/SPR-11106

    0 讨论(0)
  • 2020-12-11 08:50

    This issue is fixed in Spring 3.2. You can create a global exception handler class with the @ControllerAdvice annotation. Then in that class add an @ExceptionHandler method to handle the ServletRequestBindingException and return a custom response body. Example:

    @ControllerAdvice
    public class GlobalExceptionHandler {
      @ExceptionHandler(ServletRequestBindingException.class)
      public ResponseEntity<String> handleServletRequestBindingException(ServletRequestBindingException ex)   {
          return new ResponseEntity<String>("MISSING REQUIRED HEADER",HttpStatus.PRECONDITION_REQUIRED);
      }
    }
    

    For more information check the spring mvc docs: 17.11 Handling exceptions

    0 讨论(0)
提交回复
热议问题