我正在创建自己的日志过滤器实现ContainerRequestFilter
和ContainerResponseFilter
. 我只想在响应失败时打印请求实体,例如。响应状态码为 404、500。
但是当我在 ContainerResponseFilter(); 的过滤器方法中执行 request.getEntity() 或 request.getEntityInputStream() 时得到空字符串;
看起来球衣在资源级别阅读后删除了内容。
我正在创建自己的日志过滤器实现ContainerRequestFilter
和ContainerResponseFilter
. 我只想在响应失败时打印请求实体,例如。响应状态码为 404、500。
但是当我在 ContainerResponseFilter(); 的过滤器方法中执行 request.getEntity() 或 request.getEntityInputStream() 时得到空字符串;
看起来球衣在资源级别阅读后删除了内容。
它需要从输入流中读取实体,该实体不可重置(所涉及的基础设施不会保留它的副本)。request.getEntityInputStream()
因此,由于之前已读取输入流,因此当您调用实现的类时,它应该什么都没有ContainerResponseFilter
。LoggingFilter为您完成工作。但是正如您所提到的,如果您想自定义它,那么您需要编写一个与该实现类似的实现,当然还需要添加代码来自定义日志记录。