jersey – 从JAX-RS资源中获取HTTP URL

从我的JAX-RS(Jersey)资源内部,我需要获取Jersey“Servlet”的基本URL,即“发布”该资源.我尝试按照here所述注入ServletContext,然后执行:

return servletContext.getResource("/").toString();

获取此资源的Jersey Servlet的“基本”URL.

但是,上面的代码返回一个值,如:

jndi:/localhost/jax-rs-tomcat-test/

我期待更多的东西:

http://localhost:8080/jax-rs-tomcat-test/jax-rs

其中“jax-rs”就是我在web.xml中的内容:

<servlet-mapping>  
   <servlet-name>jersey-servlet</servlet-name>  
   <url-pattern>/jax-rs/*</url-pattern>  
</servlet-mapping> 

也就是说,存在四个“差异”:(a)协议,(b)协议之后的单个而不是双斜杠,(c)端口号和(d)用于触发Jersey servlet的URL模式缺失.那么,我该怎么做:

> Jersey servlet的基本http:// URL
>触发特定@GET或@POST注释方法的完整URL?

最佳答案
您正在寻找UriInfo.使用@Context将其注入您的资源:

@Context
private UriInfo uriInfo;

然后你可以调用getBaseUri()方法:

uriInfo.getBaseUri();

转载注明原文:jersey – 从JAX-RS资源中获取HTTP URL - 代码日志