【问题标题】:Log request body in quarkus-resteasy-reactive在 quarkus-resteasy-reactive 中记录请求正文
【发布时间】:2021-09-08 07:05:20
【问题描述】:

我想在服务器响应过滤方法中记录请求正文。我试过这个:

@ServerResponseFilter
public Uni<Void> filter(ContainerRequestContext request, ContainerResponseContext response) {
    logger.info(((QuarkusResteasyReactiveRequestContext) request).getRequestEntity());
    return Uni.createFrom().nullItem();
}

但它不起作用,因为:

java.lang.ClassCastException: class io.quarkus.resteasy.reactive.server.runtime.filters.PreventAbortResteasyReactiveContainerRequestContext cannot be cast to class io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext (io.quarkus.resteasy.reactive.server.runtime.filters.PreventAbortResteasyReactiveContainerRequestContext and io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext are in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @ae13544)

我怎样才能做到这一点?

【问题讨论】:

    标签: quarkus


    【解决方案1】:

    首先,在登录到控制台之前,您确实应该检查请求正文是 JSON XML 类型还是任何人类可读格式。您不想从图片上传中发现您的日志大小为 16gb 的 unicode 字符。

    这是我认为您可能正在寻找的内容(未经测试,因此可能需要一些修复)。

    @ServerResponseFilter
    public Uni<Void> filter(ContainerRequestContext request, ContainerResponseContext response) {
        logger.info(new String(request.getEntityStream​().readAllBytes(), StandardCharsets.UTF_8));
        return Uni.createFrom().nullItem();
    }
    

    【讨论】:

    • 是的,我正在做所有的检查,我没有放在这里,所以代码更专注于问题。这不起作用,此时已经读取了输入流。读取所有字节只会返回零。
    【解决方案2】:

    框架尚不支持此功能。请求在这里https://github.com/quarkusio/quarkus/issues/17280

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 2015-04-26
      相关资源
      最近更新 更多