spring rest处理空请求体(400 Bad Request)

rvi*_*t34 6 java rest spring spring-boot spring-4

我正在使用Spring4开发RESTful应用程序.我想在POST请求中没有传递正文时处理大小写.我写自定义异常处理程序:

@ControllerAdvice
public class MyRestExceptionHandler {

  @ExceptionHandler
  @ResponseStatus(HttpStatus.BAD_REQUEST)
  public ResponseEntity<MyErrorResponse> handleJsonMappingException(JsonMappingException ex) {
      MyErrorResponse errorResponse = new MyErrorResponse("request has empty body");
      return new ResponseEntity<MyErrorResponse>(errorResponse, HttpStatus.BAD_REQUEST);
  }   
  @ExceptionHandler(Throwable.class)
  public ResponseEntity<MyErrorResponse> handleDefaultException(Throwable ex) {
    MyErrorResponse errorResponse = new MyErrorResponse(ex);
    return new ResponseEntity<MyErrorResponse>(errorResponse, HttpStatus.BAD_REQUEST);
  }

}
 @RestController
 public class ContactRestController{
    @RequestMapping(path="/contact", method=RequestMethod.POST)
    public void save(@RequestBody ContactDTO contactDto) {...}
 } 
Run Code Online (Sandbox Code Playgroud)

但是当它发生时,这些方法将不会被调用.我刚收到400 BAD REQUEST http状态和空身的响应.有人知道如何处理吗?

rvi*_*t34 14

我找到了如何抓住它.我的解决方案是:

    @ControllerAdvice
    public class RestExceptionHandler extends ResponseEntityExceptionHandler {

        @Override
        protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
            // paste custom hadling here
        }
    }
Run Code Online (Sandbox Code Playgroud)


Ngu*_*ien 7

就我而言,我需要处理所有具有无效参数的请求。所以我用方法扩展了我的类并ResponseEntityExceptionHandler重写了方法handleMissingServletRequestParameter。您可以在类中找到自己定义的处理程序ResponseEntityExceptionHandler

@ControllerAdvice 
public class YourExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(Exception.class)
    public final ResponseEntity handleAllExceptions(Exception ex) {
        // Log and return
    }

    @Override
    public ResponseEntity<Object> handleMissingServletRequestParameter(MissingServletRequestParameterException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
        // Do your code here
        return new ResponseEntity<>("YOUR REQUEST PARAMS NOT MATCH!");
    } 
}
Run Code Online (Sandbox Code Playgroud)