Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

spring - Spring3 @ExceptionHandler for ServletRequestBindingException

I am using a Default AnnotationMethodHandlerAdapter which I believe should enable support for @ExceptionHandler. Unluckily, a ServletRequestBindingException is thrown if a call to a handler method like this below is coming in - and not Exception handler is invoked.

@RequestMapping(value = "/v1/products/{code}", method = RequestMethod.GET, headers = "Accept=application/xml,application/json")
@ResponseBody
public ProductDemoDTO getProductByCode(@PathVariable final String code,
        @RequestParam(required = false, defaultValue = "BASIC") final String options)
{
    //omitted
}

Here teh ExceptionHandler, never called:

@ExceptionHandler(Throwable.class)
@ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
//TODO not being called?
public void handleException(final Exception e, final HttpServletRequest request, final Writer writer) throws IOException
{
    writer.write(String.format("{"error":{"java.class":"%s", "message":"%s"}}", e.getClass(), e.getMessage()));
}

Does anyone know why the ExceptionHandler is not called?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...