Maven项目调用REST GET服务返回404错误,请求排查原因
REST GET服务返回"not found"错误的排查与修复
问题根源与修复步骤
1. Servlet名称不匹配(web.xml配置错误)
你的web.xml中,定义的Servlet名称是jersey-servlet,但Servlet映射引用的名称是Jersey Web Application,两者不一致导致请求无法被Jersey容器处理。
修复代码:
<!-- 修改后的servlet-mapping --> <servlet-mapping> <servlet-name>jersey-servlet</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping>
2. 路径重复导致URL匹配失败
Java类Rest上标注了@Path("/rest"),同时web.xml中Servlet映射的url-pattern是/rest/*,这会让实际有效路径变成/rest/rest/getuser,而你调用的/rest/getuser无法匹配。
修复方案二选一:
- 方案一:移除类上的
@Path("/rest")注解,保持方法上的@Path("/getuser")package com; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; // 移除类级别的@Path("/rest") public class Rest { @GET @Path("/getuser") @Produces(MediaType.APPLICATION_JSON) public User getUser() { User u = new User(); u.setName("carmine"); u.setSurname("armenante"); System.out.println("sono dentro"); return u; } } - 方案二:将web.xml中的
url-pattern改为/*,保留类上的@Path("/rest")
3. 缺失JSON序列化依赖
你启用了POJOMappingFeature,但当前pom.xml中缺少Jersey处理JSON的核心依赖,即使路径修复,后续也会出现序列化错误。
修复代码:在pom.xml的<dependencies>中添加:
<dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>3.1.3</version> </dependency>
4. User类需满足序列化要求
确保User类具备无参构造函数和所有属性的getter方法,否则JSON序列化会失败:
package com; public class User { private String name; private String surname; // 必须提供无参构造 public User() {} // getter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } }
验证
完成以上修改后,重新部署项目,调用原请求URL:http://localhost:8080/ProvaMaven-0.0.1-SNAPSHOT/rest/getuser即可正常获取JSON响应。
内容的提问来源于stack exchange,提问作者user22253296
相关产品推荐
相关产品推荐

