在玩夸库斯时,我试图在我的应用程序中注入ServletContext
:
@Controller
@Path("/greeting/")
@RequestScoped
public class GreetingResource {
@Inject
ServletContext servletContext;
}
它编译得很好,但是在打包阶段夸克-maven-plugin失败了:
[1] Unsatisfied dependency for type javax.servlet.ServletContext and qualifiers [@Default]
- java member: exampleapp.GreetingResource#servletContext
- declared on CLASS bean [types=[java.lang.Object, exampleapp.GreetingResource], qualifiers=[@Default, @Any], target=exampleapp.GreetingResource]
我的应用程序依赖于io.quarkus:quarkus-resteasy,,它可以拉进io.quarkus:quarkus-undertow,,而后者又可以拉进io.undertow:undertow-servlet.
我希望任何底层扩展都能提供ServletContext
的注入,但显然我的假设是错误的.有什么想法吗?
发布于 2019-06-10 12:08:20
@Inject ServletContext只工作于Java环境。Quarkus集成JAX-RS,以便您可以通过使用ServletContext JAX RS @Context来访问实例。
@Controller
@Path("/greeting/")
@RequestScoped
public class GreetingResource {
// javax.ws.rs.core.Context
@Context
ServletContext servletContext;
// OR
@GET
@Path("/test")
@Produces({ MediaType.TEXT_PLAIN })
public Response test(@Context ServletContext servletContext) {
// return ...
}
}
您的方式也是有效的,但是它显式地依赖于下面的API。
更新:
Quarkus 0.17.0+使用CDI @Inject注释增加了对ServletContext注入的支持。参见此https://github.com/quarkusio/quarkus/pull/2850
发布于 2019-06-10 11:43:09
一个小摆设告诉我,这种类型没有制作方法.下面的片段帮助了我:
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
import javax.inject.Singleton;
import javax.servlet.ServletContext;
import io.undertow.servlet.handlers.ServletRequestContext;
@Singleton
public class ServletContextProducer {
@Produces
@RequestScoped
public ServletContext servletContext() {
return ServletRequestContext.current().getCurrentServletContext();
}
}
https://stackoverflow.com/questions/56531759
复制相似问题