RESTfull Jersey应用程序,请求的资源不可用

时间:2016-12-07 14:08:22

标签: java rest tomcat jersey

这是我第一次使用RESTfull应用程序。我读过许多与我的问题相同的页面,但是他们没有安静地打了一个标记。

这是我的服务。

package com.tutorialspoint;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/UserService")
public class UserService {

   UserDao userDao = new UserDao();

   @GET
   @Path("/users")
   @Produces(MediaType.APPLICATION_XML)
   public List<User> getUsers(){
      return userDao.getAllUsers();
   }    
}

我的XML文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns="http://java.sun.com/xml/ns/javaee" 
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
   id="WebApp_ID" version="3.0">
   <display-name>User Management</display-name>
   <servlet>
      <servlet-name>Jersey RESTful Application</servlet-name>
      <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.tutorialspoint</param-value>
         </init-param>
      </servlet>
   <servlet-mapping>
   <servlet-name>Restful Web Service</servlet-name>
      <url-pattern>/rest/*</url-pattern>
   </servlet-mapping>  
</web-app>

我使用的是Jersey 2.17和Tomcat 7.0。看起来所有.jar都被正确添加到 / WEB-INF / lib 。我将项目导出为.war文件并将其放入 / Tomcat / webapps 目录中。 然后我试图启动

  

http://localhost:8080/RestV1/rest/UserService

我收到此错误:

  

HTTP状态404 - / RestV1 / rest / UserService / users请求的资源是   不可用。

这些方法来自教程,所以不应该有任何问题。我的Tomcat错误日志也是空的。 知道什么是错的吗?

1 个答案:

答案 0 :(得分:0)

您需要使用<servlet-name><servlet>中定义的相同<servlet-mapping>。所以使用servlet定义:

<servlet>
  <servlet-name>Jersey RESTful Application</servlet-name>
  ...
</servlet>

您的映射应如下所示:

<servlet-mapping>
   <!-- this will not map properly
     <servlet-name>Restful Web Service</servlet-name>
   -->
   <servlet-name>Jersey RESTful Application</servlet-name>
   <url-pattern>/rest/*</url-pattern>
</servlet-mapping> 

我下载了Tomcat并确保在名字不匹配时获得404,并且当他们这样做时请求到达了servelt。

作为参考,搜索servlet-mappings并注意使用的名称始终匹配examples