从我的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模式缺失。那么,我该怎么做:
http://
网址@GET
或@POST
带注释方法的完整网址? 答案 0 :(得分:11)
您正在寻找UriInfo。使用@Context
将其注入您的资源:
@Context
private UriInfo uriInfo;
然后你可以调用getBaseUri()
方法:
uriInfo.getBaseUri();