使用jersey的JAXRS Rest服务中的问题

时间:2015-01-06 12:10:38

标签: java rest jersey jax-rs

使用jersey JAXRS API在tomcat 7上部署了一个演示Rest服务。开发了资源类

@Path("/supportdata")
public class SupportDataService {
    public SupportDataService() {
        // TODO Auto-generated constructor stub
    }


    @GET
    @Produces(MediaType.APPLICATION_XML)
    public String getSupportData(){
        String xmlSupport=null;

        xmlSupport="<SupportData><Support><key>path1</key><value>value1</value></Support><Support><key>path2</key><value>value2</value></Support></SupportData>";

        return xmlSupport;
    }
}

应用程序的子类

public class RestApplication extends Application {
    public RestApplication() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public Set<Class<?>> getClasses() {
        // TODO Auto-generated method stub

        Set<Class<?>> s=new HashSet<Class<?>>();
        s.add(SupportDataService.class);
        return s;
    }
}
 Web.xml contains

<web-app>
 <servlet>
        <servlet-name>com.jaxrs.RestApplication</servlet-name>
    </servlet>
    <servlet-mapping>
        <servlet-name>com.jaxrs.RestApplication</servlet-name>
        <url-pattern>/resources</url-pattern>
    </servlet-mapping>
</web-app>

Included javax.ws.rs-api-2.0.1.jar from jersey in the project. Deployed it on defaultport of tomcat 7 and calling the url  on local host port 8080 and url 

/ RestService /资源/ supportdata

获得404错误的资源不可用。

1 个答案:

答案 0 :(得分:1)

鉴于...

  1. RestApplication位于com.jaxrs

  2. 您具有所需的依赖关系 [1]

  3. 与您未向我们展示的内容相关的其他未知问题

  4. 你需要做的就是让它工作......

    是改变

     <url-pattern>/resources</url-pattern>
    

     <url-pattern>/resources/*</url-pattern>
    

    应该可以通过http://localhost:8080/yourapp/resources/supportdata

    访问资源

    测试过,它运行正常。 /resources将网址格式严格限制为/resources。当您添加/*时,您使用/resources前缀说任何


    [1]

    使用Maven,这是我使用的唯一依赖

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.13</version>
    </dependency>
    

    不使用Maven(啊,为什么?):

    我建议你下载RI Bundle from here并将所有的jar包含在你的项目中。


    只是其他人对OP的配置感到头疼,这是来自JAX-RS规范:

      

    如果存在Application子类:

         
        
    • 如果已经存在处理此应用程序的servlet。也就是说,一个具有名为

      的初始化参数的servlet      

      javax.ws.rs.core.Application

           

      其值是Application子类的完全限定名称,因此JAX-RS实现不需要其他配置步骤。

    •   
    • 如果没有servlet处理此应用程序,则需要JAX-RS实现来动态添加其完全限定名称必须是Application子类的名称的servlet。如果Application子类使用@ApplicationPath注释,则实现必须使用附加"/*"的此注释的值来定义添加的服务器的映射。否则,应用程序必须与web.xml一起打包,该org.example.MyApplication指定servlet映射。例如,如果web.xml是Application子类的名称,则示例1 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 4 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 5 <servlet> 6 <servlet-name>org.example.MyApplication</servlet-name> 7 </servlet> 8 <servlet-mapping> 9 <servlet-name>org.example.MyApplication</servlet-name> 10 <url-pattern>/myresources/*</url-pattern> 11 </servlet-mapping> 12 </web-app> 将为:

    •   
    {{1}}