这是我第一次使用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状态404 - / RestV1 / rest / UserService / users请求的资源是 不可用。
这些方法来自教程,所以不应该有任何问题。我的Tomcat错误日志也是空的。 知道什么是错的吗?
答案 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