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

在RESTEasy Reactive/Quarkus中插入HttpRequest失败

栾烨华
2023-03-14

我目前正在尝试在Quarkus 1.13中注入和读出HttpRequest,但是没有任何成功。我使用RESTEasy-Reactive作为我的endpoint。

这就是我目前包含它的方式。

@Path("/users/{id}")
class UserController(
    @Inject val service: UserService,
    @Context val httpRequest: io.vertx.core.http.HttpServerRequest,
) 
...

构建过程成功,但是当我试图访问像< code > http request . absolute uri()这样的属性时,我得到了一个NPE

java.lang.NullPointerException: Cannot invoke "org.jboss.resteasy.reactive.server.core.ResteasyReactiveRequestContext.serverRequest()" because the return value of "org.jboss.resteasy.reactive.server.core.CurrentRequestManager.get()" is null
    at io.quarkus.resteasy.reactive.server.runtime.QuarkusContextProducers.httpServerRequest(QuarkusContextProducers.java:26)
    at io.quarkus.resteasy.reactive.server.runtime.QuarkusContextProducers_Subclass.httpServerRequest$$superaccessor3(QuarkusContextProducers_Subclass.zig:451)
    at io.quarkus.resteasy.reactive.server.runtime.QuarkusContextProducers_Subclass$$function$$3.apply(QuarkusContextProducers_Subclass$$function$$3.zig:29)
    ...

我还尝试了其他类,如io.vertx.mutiny.core.http.HttpServerRequestjava.net.http.HttpRequest,但仍然没有成功。用@Inject注入它甚至没有构建。我缺少HttpServletRequest类:/

有人有主意吗?

共有1个答案

柳英豪
2023-03-14

你有几个选择:

使用HttpFilter:https://javaee.github.io/javaee-spec/javadocs/javax/servlet/http/HttpFilter.html

@WebFilter(urlPatterns = "/*")
public class FilterEverything extends HttpFilter {


    @Override
    protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException {

        //Do something with HttpServletRequest 
    }

}

使用container request filter:https://docs . Oracle . com/javaee/7/API/javax/ws/RS/container/container request filter . html

作为Quarkus文档展示:

@Provider
public class LoggingFilter implements ContainerRequestFilter {

    private static final Logger LOG = Logger.getLogger(LoggingFilter.class);

    @Context
    UriInfo info;

    @Context
    HttpServerRequest request;

    @Override
    public void filter(ContainerRequestContext context) {

        //Do whatever you want
    }
}

作为方法签名的一部分:

@GET
@Path("/someEndPoint")
@Produces("application/json")
public JsonObject getData(@PathParam("owner") String owner, @Context HttpServletRequest request) {
   //Do something here
}
 类似资料:
  • 如果在批处理过程中发生错误,Oracle JDBC驱动程序将引发BatchUpdateException。使用NamedParameterJdbcDaoSupport插入数据,如下所示 由于唯一密钥约束,我遇到BatchUpdateException,我们正在处理数百万条记录,因此我们无法进入数据库检查唯一密钥。 如果一条记录失败,那么批插入不会失败。

  • 我有一个REST应用程序,其中所有方法都需要身份验证。如果用户调用方法时没有身份验证信息,或者他没有所需的角色,Quarkus将发送http status 401/403,但不记录任何内容。 是否有方法拦截失败的身份验证尝试?

  • 我正在尝试将文件插入到现有表中。现有的表有3列,这些列是ID(在表中分配)、学生号和组号。 在我的中,我有下面的格式,但是每次插入它时,我都会得到一个错误

  • 我设置了一些HTTP请求头,如下所示: 我是这样捕捉它们的: 当我运行测试工具时,一切似乎都很好: 主持人:domain.com 但是,在Wireshark和Fiddler中,仅发送以下标头: 获取/HTTP/1.1 知道为什么吗?

  • 使用flyway-core:4.1.2进行数据库迁移。 添加了一个新的DDL文件供flyway执行。Flyway会正确执行DDL并对表和列进行相应的更改。(我们在新的DDL中添加了一个表并更改了以前的一些列)。 但是,flyway无法将此尝试注册到schema_version表:我得到以下错误: 架构[dbo]的当前版本:2.1 无法在元数据表[dbo]中插入版本“3.0”的行。[schema_v

  • 我通过https://code.Quarkus.io引导了一个普通的Quarkus应用程序,生成的代码没有在我的Mac上成功构建docker映像。 执行时 顺便说一句:使用GraalVM的本机映像已成功生成 有什么想法吗?