RESTful WebService(Jersey实现)HTTP 404资源不可用问题求助
解决Jersey REST服务404 Not Found错误的方案
我看了你的代码和配置,马上就发现了导致404错误的核心问题——你的REST资源类和Servlet映射完全不匹配,再加上客户端请求路径也错了,所以Tomcat根本找不到你的服务端点。下面一步步给你理清问题并解决:
问题根源分析
- Servlet映射与资源包不匹配
你的JSONService类在webService包下,但在web.xml里,映射/test/*的Servlet配置的是扫描dao包,而扫描webService包的Servlet对应的是/rest/*路径。你请求的/test/register/create路径对应的Servlet根本不知道webService包下的资源存在,自然返回404。 - 客户端请求路径错误
你的Jersey客户端代码里用了http://localhost:8080/WeekendSoccer/test作为target,这和上面的问题对应,同样指向了错误的Servlet路径。
具体修复步骤
1. 修正请求URL(Postman和客户端都要改)
把请求URL从:
http://localhost:8080/WeekendSoccer/test/register/create
改成:
http://localhost:8080/WeekendSoccer/rest/register/create
2. 修正Jersey客户端的请求路径
在JerseyClientPost类里,把target的路径改成/rest:
WebTarget webTarget = client.target("http://localhost:8080/WeekendSoccer/rest");
3. 优化Servlet配置(可选但推荐)
你现在配置了两个Servlet,一个扫webService一个扫dao,其实没必要分开。可以合并成一个Servlet,同时扫描多个包,这样更简洁:
修改web.xml里的Servlet配置,把两个Servlet合并:
<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <!-- 用逗号分隔多个包 --> <param-value>webService, dao</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping>
这样就不用维护两个Servlet了,所有的Jersey资源和客户端相关类都能被正确扫描到。
4. 确保JSON序列化正常(额外检查)
虽然404不是序列化问题,但为了后续能正常返回JSON,确认你的依赖里有jackson-jaxrs-json-provider(你已经包含了),同时RegisterPlayer类要确保有无参构造函数(你已经写了)和完整的getter/setter方法,这样Jackson才能正确序列化和反序列化对象。
验证步骤
- 重启Tomcat服务器,确保配置生效。
- 用Postman发送POST请求到修正后的URL:
http://localhost:8080/WeekendSoccer/rest/register/create,请求体用JSON格式:
{ "name": "Link", "email": "link@test.com", "company": "Test Ltd" }
- 运行你的
JerseyClientPost客户端,应该能收到201状态码和正确的响应信息。
内容的提问来源于stack exchange,提问作者ljs
相关产品推荐
相关产品推荐

