有没有办法在ExceptionHandler中访问POST请求的正文?

时间:2018-09-13 15:57:53

标签: java spring-boot

在Spring Boot API Rest应用中,对于给定的ExceptionHandler,我有一个RestController。该控制器具有@RequestBody注释,在其一种方法中为String

@RestController
public class FooController {
    @PostMapping("/my_url")
    public ResponseEntity myMethod(@RequestBody String param) { 
        ....
    }

    @ExceptionHandler({MyCustomException.class})
    public ResponseEntity handleMyCustomException(MyCustomException ex) {
        ...
    }

}

我无法通过String方法访问前面提到的@ExceptionHandler(正如标题中所说的那样,它对应于POST请愿书的正文)

我可以在param中设置WebRequest变量,然后使用handle方法来检索它,但这似乎是一种很棘手的方法。

框架是否提供了一种解决方案,可以访问POST中的ExceptionHandler请愿正文?

2 个答案:

答案 0 :(得分:2)

我认为您要提出的问题与this one相同。 不幸的是,似乎没有一个优雅而简单的解决方案。

由于您引发了自定义异常,因此您可以考虑在异常中添加一个属性以保存该额外信息(即param)。

答案 1 :(得分:1)

您正在寻找吗?

@ControllerAdvice
public class MyExceptionHandler extends ResponseEntityExceptionHandler {

/**Here you can inject any you spring beans**/

  @ExceptionHandler({ MyCustomException.class })
  protected ResponseEntity<Object> handleInvalidRequest(RuntimeException exc, WebRequest request) {
    MyCustomException exception = (MyCustomException) exc;
    /**here you can do watewer you want with an exception and a body**/
    HttpHeaders headers = new HttpHeaders();
    /**here you have to create some response objects if needed**/
    YourExceptionWrapper error = new YourExceptionWrapper(exception.getMessage());
    headers.setContentType(MediaType.APPLICATION_JSON);
    /**and then send a bad request to a front-end**/
    return handleExceptionInternal(exc, error, headers, HttpStatus.BAD_REQUEST, request);
  }
}