在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
请愿正文?
答案 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);
}
}