当前位置: 首页 > 知识库问答 >
问题:

如何在quarkus框架中使用@ServerRequestFilter,该框架使用vert.x读取ContainerRequestContext中的请求正文

戎永福
2023-03-14

我想在@ServerRequestFilter过滤器中打印post请求正文的json日志

    @ServerRequestFilter
public void requestFilter(ContainerRequestContext requestContext) throws IOException {
    InputStream entityStream = requestContext.getEntityStream();
    byte[] data = new byte[1024];
    int r;
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    while ((r = entityStream.read(data)) > 0) {
        out.write(data, 0, r);
    }
    log.info(StrUtil.format("body->[{}]", out.toString(StandardCharsets.UTF_8)));
    requestContext.setEntityStream(new ByteArrayInputStream(out.toByteArray()));
}

但是我发现无论我对entityStream触发器做什么:

java.io.IOException: Attempting a blocking read on io thread
   at org.jboss.resteasy.reactive.server.vertx.VertxInputStream$VertxBlockingInput.readBlocking

共有1个答案

姬熙云
2023-03-14

如果您真的想这样做,您应该在扩展javax.ws.rs.core.application的类上添加@blocking,如下所示:

@Blocking 
public class MyApplication extends Application {
}
 类似资料:
  • 我正在尝试将apache camel与Quarkus一起使用。之前,我使用Spring Boot框架开发camel集成。所以有很多问题我仍在试图弄清楚w.r.t.Quarkus框架。 关于:豆子 在Spring靴里我可以做这样的事 然后我可以使用DI将它注入到类中 问题: 我如何在Quarkus框架中做同样的事情?P. S. 谢谢,

  • EasyWeChat 是一个通用的 Composer 包,所以不需要对框架单独做修改,只要支持 Composer 就能直接使用,当然了,为了更方便的使用,我们收集了以下框架单独提供的拓展包: Laravel overtrue/laravel-wechat Symfony lilocon/WechatBundle Yii jianyan74/yii2-easy-wechat 适用于 EasyWeCh

  • QueryList无框架依赖,可以灵活的嵌入到任何项目中去。 在使用Composer管理的项目中安装 在非Composer管理的项目中安装 QueryList可以集成到任何框架中去使用,无需做任何修改,直接使用Composer安装到项目中去即可。 在使用Composer管理的项目中安装 如果项目框架本身就是使用Composer来管理包的话,直接在项目根目录执行Composer安装命令后,即可在项目

  • 在我的Play(Java)框架项目中,我正在使用Guice进行依赖项注入,并且正在努力理解如何最好地将“会话”的概念与Guice和Play结合使用? 我知道Play是无状态的,除了可以在cookie中存储值之外,实际上没有会话的概念。我对Guice和Play的理解是,虽然Guice文档描述了支持不同的作用域(单例、会话、请求、无作用域),但因为我们正在用每个请求实例化一个新的注入器,所以仅适用于P

  • 问题内容: 例如,如何使用CoreGraphics和CoreFoundation在macOS上操纵屏幕和处理数据。 问题答案: 假设我们要使用CoreGraphics和CoreFoundation捕获屏幕并获取图像数据: