在JAX-RS Provider中使用@Context为CDI bean提供上下文信息

时间:2015-11-05 19:46:33

标签: java jax-rs cdi wildfly resteasy

我有一些网络服务(JAX-RS,WildFly 9,Resteasy)

@RequestScoped
public class SomeService{
// operations
}

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

完成
@Context
private HttpHeaders httpHeaders;

似乎只能在JAX-RS相关的类中注入此上下文,但不能在Web服务调用的CDI bean中注入。可以将其放入Web服务中,但这会使服务与服务的核心响应无关的内容混乱。

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

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

问题是这是不是很好的做法?或者这只是一个巧合吗?如果这不是一个好习惯,我怎么能以更好的方式做到这一点? 在查看What does Provider in JAX-RS mean?之后,我不确定我是否正在扩展和自定义JAX-RS运行时'。应该由应用程序开发人员使用吗?

0 个答案:

没有答案