您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用Spring MVC从ExceptionHandler获取请求值

使用Spring MVC从ExceptionHandler获取请求值

好吧,请求主体位于HttpServletRequest中。

您可以通过执行以下操作来访问RAW请求正文:

String body = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));

从异常处理程序方法。(使用Java 8)。

然后,您可以将主体字符串解析为POJO。

注意,avobe答案无效。发生这种情况是因为在解析正文(使用@RequestBody)时,http连接流已关闭,因此无法再次访问请求正文。如何通过控制器方法属性直接注入httpRequest,然后在Exception处理程序中访问值:

@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());
    }
}

希望这可以帮助

Java 2022/1/1 18:14:55 有622人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶