Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将HttpRequest注入RESTEasy被动/Quarkus失败_Java_Kotlin_Resteasy_Vert.x_Quarkus - Fatal编程技术网

Java 将HttpRequest注入RESTEasy被动/Quarkus失败

Java 将HttpRequest注入RESTEasy被动/Quarkus失败,java,kotlin,resteasy,vert.x,quarkus,Java,Kotlin,Resteasy,Vert.x,Quarkus,我目前正试图在Quarkus 1.13中注入并读取HttpRequest,但没有任何成功。我正在使用RESTEasy Reactive作为我的端点 这就是我目前包括它的方式 @Path("/users/{id}") class UserController( @Inject val service: UserService, @Context val httpRequest: io.vertx.core.http.HttpServerRequest, ) .

我目前正试图在Quarkus 1.13中注入并读取HttpRequest,但没有任何成功。我正在使用RESTEasy Reactive作为我的端点

这就是我目前包括它的方式

@Path("/users/{id}")
class UserController(
    @Inject val service: UserService,
    @Context val httpRequest: io.vertx.core.http.HttpServerRequest,
) 
...
构建过程成功,但当我尝试访问类似于
httpRequest.absoluteURI()的属性时,我得到了一个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.HttpServerRequest
java.net.http.HttpRequest
,但仍然没有成功。用
@Inject
注入它甚至没有生成。我缺少
HttpServletRequest
类:/


有人有主意吗?

你有几个选择:

使用HttpFilter:

使用ContainerRequestFilter:

如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
}

你试过用它作为方法参数吗?此外,你需要从中获得什么信息?方法参数方法奏效了!非常感谢@geoandLike@geoandcommented,方法参数方法非常有效。但是我没有使用
@Context-httpRequest:HttpServletRequest
,而是使用
@Context-httpRequest:io.vertx.core.http.HttpServerRequest
。也感谢您的帮助:)
@GET
@Path("/someEndPoint")
@Produces("application/json")
public JsonObject getData(@PathParam("owner") String owner, @Context HttpServletRequest request) {
   //Do something here
}