有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javajaxrs@Path嵌入变量

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

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

我的上下文根是/api

我的网络。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) 个答案

  1. # 1 楼答案

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

    localhost:8080/projectname/api/v15/tasks

    • 项目名称:项目名称
    • /api:servlet映射
    • /v15/任务:路径注释
  2. # 2 楼答案

    太阳网。xml

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

    网络。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-效果很好