Java 在JAX-RS提供者中使用@Context向CDIBeans提供上下文信息

Java 在JAX-RS提供者中使用@Context向CDIBeans提供上下文信息,java,jax-rs,cdi,wildfly,resteasy,Java,Jax Rs,Cdi,Wildfly,Resteasy,我有一些web服务(JAX-RS、WildFly 9、Resteasy) 现在我想提取上下文信息,比如用户代理,可以使用 @Context private HttpHeaders httpHeaders; 似乎只能将此上下文注入JAX-RS相关类中,而不能注入webservice调用的cdibean中。可以将其放入Web服务中,但这会使服务中的内容与服务的核心响应无关 经过一些搜索,我最终使用了javax.ws.rs.ext.Provider注释。似乎生成的ContextInformation

我有一些web服务(JAX-RS、WildFly 9、Resteasy)

现在我想提取上下文信息,比如用户代理,可以使用

@Context
private HttpHeaders httpHeaders;
似乎只能将此上下文注入JAX-RS相关类中,而不能注入webservice调用的cdibean中。可以将其放入Web服务中,但这会使服务中的内容与服务的核心响应无关

经过一些搜索,我最终使用了
javax.ws.rs.ext.Provider
注释。似乎生成的
ContextInformation
对象可以在其他CDIBean中使用,而不仅仅是在JAX-RS bean中

@Provider
public class ContextInformationProducer {
    @Produces
    @RequestScoped
    public ContextInformation create() {
        ContextInformation contextInformation = new ContextInformation();
        contextInformation.setBrowserUserAgent(httpHeaders.getHeaderString("User-Agent"));
    }
问题是这是否是好的做法?或者这只是一个巧合?如果这不是一个好的做法,我如何才能以更好的方式做到这一点? 查看之后,我不确定我是否在“扩展和定制JAX-RS运行时”。应用程序开发人员应该使用它吗

@Provider
public class ContextInformationProducer {
    @Produces
    @RequestScoped
    public ContextInformation create() {
        ContextInformation contextInformation = new ContextInformation();
        contextInformation.setBrowserUserAgent(httpHeaders.getHeaderString("User-Agent"));
    }