Java 在JAX-RS提供者中使用@Context向CDIBeans提供上下文信息
我有一些web服务(JAX-RS、WildFly 9、Resteasy) 现在我想提取上下文信息,比如用户代理,可以使用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
@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"));
}