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

标签 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 Status 404 - /RestV1/rest/UserService/users The requested resource is not available.

这些方法来自教程,因此它们应该没有任何问题。我的 Tomcat 错误日志也是空的。 知道哪里出了问题吗?

最佳答案

您需要使用相同的 <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,请求在匹配时到达服务器。

作为引用,搜索 servlet-mappings 并注意在这些 examples 中使用的名称始终匹配

关于java - RESTfull Jersey 应用程序,请求的资源不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41019549/

相关文章:

jsp - 增加 servlet session cookie

java - 创建类的对象时找不到方法 <init>()V

java - 为什么 Java 不使用 GSON 将我的对象序列化为适当的 JSON 格式?

java - 如何识别非静态tomcat请求

java - Tomcat 和 STS 上的 Spring Web MVC - 请求的资源不可用

java - Neo4j java 剩余绑定(bind)

REST API : what happens to sub resource in case of PUT

java 类路径意外地找到了一个库

java - 如何更改有序+持久集合中的顺序?

c# - 使用Windows身份验证的Asp.net核心Web API - Cors请求未经授权