【问题标题】:how to log resteasy client request如何记录resteasy客户端请求
【发布时间】:2015-07-06 07:29:30
【问题描述】:

在将 REST 消息体发送到客户端之前,我需要知道它的确切内容是什么,以及在处理之前它的响应,所以我尝试使用 Interceptors,但不幸的是它不工作。 p>

        @NameBinding
        public @interface DoIt {}

        @DoIt
        public class MyFilter implements ContainerRequestFilter {...}

        @Path("/root")
        public class MyResource {

           @GET
           @DoIt
           public String get() {...}
        }

我不能使用wireshark来捕获http消息,因为我的服务器只接受Https请求。

我在 Resteasy 中搜索了很多并找到了许多记录日志的方法,但其中大多数都是旧的且已弃用,并且上述新方法不起作用。 有谁知道如何解决这个问题?

RestEasy 3.0.9

JBoss EAP 6.3 将 restEasy 更新到 3.0.9

谢谢

编辑:

我也为 ContainerRequestFilter 测试 @Privider。

也适用于我的界面

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(value = RetentionPolicy.RUNTIME)
@NameBinding

并将其添加到 web.xml

<context-param>
    <param-name>resteasy.providers</param-name>
    <param-value>com.mypackage.RequestMessageLogger</param-value>
</context-param>

仍然没有调用过滤器。

【问题讨论】:

  • 您使用的是哪个应用服务器?
  • 你确定更新真的有效吗?
  • 是的,我的请求已发送,我完全收到响应。我需要一个复杂请求的日志,但我认为我的请求丢失了一些东西。
  • 只是不确定您是否真的在运行新版本或不知道 ContainerRequestFilter 的原始版本。
  • 这样我应该会看到找不到类,运行时错误,但没有。

标签: logging resteasy interceptor


【解决方案1】:

您的 ContainerRequestFilter 缺少 @Provider 注释。来自api-docs:

实现此接口的过滤器必须使用 @Provider 进行注释,以便 JAX-RS 运行时发现。

这应该可行:

@DoIt
@Provider
public class MyFilter implements ContainerRequestFilter {...}

【讨论】:

  • “不工作”是什么意思?过滤器没有被调用吗?你在这个过滤器里面做什么?您是否尝试过不使用 @DoIt 注释?
  • 过滤器函数根本没有被调用,在过滤器里面我有一个打印日志用于测试。
猜你喜欢
  • 2015-12-05
  • 2021-06-23
  • 2019-04-09
  • 2023-03-09
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 2015-07-23
  • 2017-05-05
相关资源
最近更新 更多