我有一些网络服务(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运行时'。应该由应用程序开发人员使用吗?