【发布时间】:2017-01-08 02:48:48
【问题描述】:
我在基于 Spring Boot 的应用程序中使用 ResponseEntityExceptionHandler,在一个地方捕获错误并输出一致的错误负载。
一切都按预期进行。
ResponseEntityExceptionHandler 有一个方法 handleHttpMessageNotReadable 可用于对发送无效消息(在我的情况下为 JSON 有效负载)的客户端“做出反应”。
再次,一切都按预期工作。如果客户端POST一个无效的JSON文档,则handleHttpMessageNotReadable中的代码被正确执行。
现在,出于监控目的,我想记录无效的 JSON。
这是我在 handleHttpMessageNotReadable 方法中使用的代码,用于获取有效负载。
String line = null;
StringBuffer jb = new StringBuffer();
try {
BufferedReader reader = servletWebRequest.getRequest().getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (IOException e) {
e.printStackTrace();
}
正如预期的那样,我收到了一个异常,因为 Jackson 已经使用了该流,用于实际解析 JSON 有效负载:
java.lang.IllegalStateException: getInputStream() has already been called for this request
访问原始 POST 有效负载的简单方法是什么?
是否可以抛出包含原始有效负载 (MyException extends HttpMessageNotReadableException) 的自定义异常?
【问题讨论】:
标签: spring rest spring-boot exception-handling