从JAX-RS资源中获取HTTP URL

时间:2013-11-24 20:59:04

标签: jersey tomcat7 jax-rs

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

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

获取此资源的泽西Servlet的“基本”网址。

但是上面的代码返回的值如下:

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模式缺失。那么,我该怎么做:

  1. Jersey servlet的基本http://网址
  2. 触发特定@GET@POST带注释方法的完整网址?

1 个答案:

答案 0 :(得分:11)

您正在寻找UriInfo。使用@Context将其注入您的资源:

@Context
private UriInfo uriInfo;

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

uriInfo.getBaseUri();