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

Java 使用jersey的JAXRS Rest服务中的问题,java,rest,jersey,jax-rs,Java,Rest,Jersey,Jax Rs,使用jersey JAXRS API在Tomcat7上部署了一个演示Rest服务。开发了一个资源类 @Path("/supportdata") public class SupportDataService { public SupportDataService() { // TODO Auto-generated constructor stub } @GET @Produces(MediaType.APPLICATION_XML)

使用jersey JAXRS API在Tomcat7上部署了一个演示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;
    }
}
@Path(“/supportdata”)
公共类SupportDataService{
公共支持数据服务(){
//TODO自动生成的构造函数存根
}
@得到
@生成(MediaType.APPLICATION\u XML)
公共字符串getSupportData(){
字符串xmlSupport=null;
xmlSupport=“路径1value1path2value2”;
返回支持;
}
}
应用程序的子类

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 
公共类重新启动应用程序扩展了应用程序{
公共重新应用程序(){
//TODO自动生成的构造函数存根
}
@凌驾
public Set>s=新哈希集给定。。。
  • RestApplication
    位于
    com.jaxrs
    包中

  • 您具有所需的依赖项[1]

  • 没有其他与你没有展示给我们的东西相关的未知问题

  • 你所需要做的就是让它工作。。。 这就是变化

     <url-pattern>/resources</url-pattern>
    
    不使用Maven(ahhhh,whyyy?):

    我建议您下载并将所有JAR包含到您的项目中


    对于那些对OP的配置摸不着头脑的人来说,这是来自JAX-RS规范:

    如果存在
    应用程序
    子类:

    • 如果已经有一个servlet处理此应用程序,即具有名为

      javax.ws.rs.core.Application

      其值是应用程序子类的完全限定名,那么JAX-RS实现不需要额外的配置步骤

    • 如果没有servlet处理此应用程序,JAX-RS实现需要动态添加一个servlet,该servlet的完全限定名称必须是应用程序子类的名称。如果
      应用程序
      子类用
      @ApplicationPath
      注释,则实现需要使用此注释附加的值
      “/*”
      为添加的服务器定义映射。否则,应用程序必须使用指定servlet映射的
      web.xml
      打包。例如,如果
      org.example.MyApplication
      是应用程序子类的名称,则示例
      web.xml
      将是:

    1
    5.
    6 org.example.MyApplication
    7.
    8.
    9 org.example.MyApplication
    10/我的资源/*
    11
    12
    
    web.xml中似乎缺少servlet类?您是否在war中也包括Jersey,或者只是
    javax.ws.rs-api-2.0.1.jar
    ?我收到了这个错误javax.servlet.ServletException:没有为servlet com.jaxrs.Restapplication指定servlet类请参阅第二个“给定”。或者使用Maven依赖项,或者从下载包下载并添加所有JAR。我已经测试了这两种方法,使用了几乎完全相同的代码。如果我们将srevlet名称指定为com.jaxrs.RestApplication,这将如何将servlet类的名称标识为javax.ws.rs.core。Application不是servlet,而com.jaxrs.RestApplication是应用程序的一个子类。请阅读规范中的最后一个要点。您可以使用Jersey
    ServletContainer
    ,但这不是问题所在。我已经用类的名称进行了测试,没有指定servlet,它可以正常工作。
     <url-pattern>/resources/*</url-pattern>
    
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.13</version>
    </dependency>
    
    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>