You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus中如何在类中获取当前HttpRequest?注入请求实例为空问题求助

在Quarkus中正确获取当前HttpRequest的方法

你遇到的空指针问题,首先得揪出最明显的错误:你导入的HttpRequest类不对! 你用的java.net.http.HttpRequest是Java标准库中用于发起HTTP请求的客户端类,根本不是Quarkus/Jakarta EE里代表当前请求的对象,这肯定会注入失败呀。

下面给你两种靠谱的解决方案,按需选择:

方案一:使用JAX-RS的HttpRequest(推荐用于JAX-RS场景)

首先把导入包换成Jakarta EE标准的JAX-RS请求类,然后确保注入和上下文正确:

import jakarta.ws.rs.core.HttpRequest;
import jakarta.enterprise.context.RequestScoped;
import jakarta.ws.rs.core.Context;

@RequestScoped
public class BaseErrorCode {

    // 用@Context注入JAX-RS的HttpRequest
    @Context
    private HttpRequest request;

    public void handleRequest() {
        if (request != null) {
            // 获取请求URI
            String requestUri = request.getUri().toString();
            // 获取请求方法(GET/POST等)
            String method = request.getMethod();
            // 这里可以做你需要的逻辑处理
        }
    }
}

注意事项:

  • 这个BaseErrorCode Bean必须在请求上下文中被调用,比如你在JAX-RS的资源类(带@Path的类)里注入它,而不能在启动时的Bean或者非请求触发的代码里直接调用,否则@RequestScoped的Bean还没初始化,request自然是空的。
  • 确保你的项目已经添加了Quarkus的JAX-RS依赖(比如quarkus-resteasy-reactive或者quarkus-resteasy),不然JAX-RS的上下文不会生效。

方案二:使用Quarkus专属的CurrentVertxRequest(更灵活)

如果你的场景不在JAX-RS上下文里,或者需要更底层的请求信息,可以用Quarkus提供的CurrentVertxRequest来获取当前请求:

import io.quarkus.vertx.http.runtime.CurrentVertxRequest;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;

@RequestScoped
public class BaseErrorCode {

    @Inject
    CurrentVertxRequest currentVertxRequest;

    public void handleRequest() {
        // 用ifPresent避免空指针
        currentVertxRequest.getCurrent().ifPresent(vertxRequest -> {
            String uri = vertxRequest.uri();
            String method = vertxRequest.method().name();
            // 这里可以获取更多底层请求信息,比如请求头、参数等
        });
    }
}

这种方式的好处是,即使在非JAX-RS的场景(比如Vert.x的路由、拦截器里)也能拿到当前请求,适用性更广。

内容的提问来源于stack exchange,提问作者Sajan Soosaimicheal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:37:49