JAX-RS @Path嵌入式变量

时间:2012-09-05 19:09:42

标签: java eclipse glassfish jax-rs

我正在使用最新的Jax-RS + Glassfish版本,我一直在尝试对我的API进行版本控制。出于某种原因,如果我在我的@Path根资源类中包含嵌入变量,它甚至不会考虑变量。

@Path("/v{versionNum}/tasks")
public class Tasks {
    @SuppressWarnings("unused")
    @Context
    private UriInfo context;
}

我的上下文根是/ api

我的web.xml包括:

 <servlet>
    <description>JAX-RS Tools Generated - Do not modify</description>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

现在,如果我尝试击中     localhost:8080 / api / v1 / tasks,我得到404。 如果我打了     localhost:8080 / api / tasks,它有效!

我不知道我在这里做错了什么。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

sun-web.xml

<sun-web-app>
  <context-root>/api</context-root>
</sun-web-app>  

web.xml

...  
<servlet>
    <servlet-name>ServletAdaptor</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>ServletAdaptor</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>  
...  

HelloWorldService.java

@Path("/v{version}/tasks")  

部署在GlassFish上 http://localhost:8080/api/v1/tasks - 运作良好

答案 1 :(得分:0)

<servlet-mapping>
  <servlet-name>JAX-RS Servlet</servlet-name>
  <url-pattern>/api/*</url-pattern>
</servlet-mapping>

本地主机:8080 /项目名称/ API / V15 /任务

  • projectname:项目名称
  • / api:servlet-mapping
  • / v15 / tasks:path annotation