Ну, тело запроса находится в HttpServletRequest.
Вы можете получить доступ к телу запроса RAW, выполнив что-то вроде:
String body = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
из метода обработчика исключений.(с использованием Java 8).
Затем вы можете проанализировать строку тела как POJO.
РЕДАКТИРОВАТЬ
Было отмечено, что ответ Avobe делаетне работа.Это происходит потому, что когда тело анализируется (с помощью @RequestBody), поток HTTP-соединения закрывается, и, следовательно, тело запроса не может быть снова получено.Как бы то ни было, вы можете внедрить свойство непосредственно в httpRequest из вашего метода контроллера, а затем получить доступ к значению в вашем обработчике исключений:
@RestController
@RequestMapping(ApiVersion.V1.prefix)
public class BatchController {
@PostMapping("/batch")
public @ResponseBody BatchResponse runBatch(@RequestBody BatchRequest batchRequest, HttpServletRequest request) throws IOException {
System.out.println(batchRequest.getName());
request.setAttribute("batchRequest" , batchRequest);
throw new IllegalArgumentException("Some error");
}
@ExceptionHandler(IllegalArgumentException.class)
public @ResponseBody BatchResponse handle(HttpServletRequest request) {
BatchRequest batchRequest = (BatchRequest) request.getAttribute("batchRequest");
System.out.println("handling exception");
return new BatchResponse(batchRequest.getName());
}
}
Надеюсь, это поможет