1 回答
TA贡献1821条经验 获得超6个赞
那么请求正文在 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());
}
}
希望这可以帮助
添加回答
举报