Jersey未注册资源:Spring Boot 2.0.0集成Jersey遇404错误
排查Spring Boot + Jersey 404错误的解决方案
结合你给出的代码片段,我整理了几个最可能导致404的原因和对应的修复方法:
1. 主类缺少@SpringBootApplication注解
你的主类App没有添加@SpringBootApplication注解,这是Spring Boot应用的核心注解——负责启用自动配置、组件扫描等关键功能。没有它,Spring无法识别并加载你的Jersey配置类和资源类,自然找不到接口路径。
修复后的主类代码:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
2. 资源类缺少必要的Jersey注解
你的FileResource类代码不完整,Jersey资源类必须满足两个核心条件才能被正确映射:
- 类上添加
@Path注解,指定该资源的基础路径(比如@Path("/files")) - 接口方法上添加HTTP方法注解(比如
@GET、@POST),还可以通过@Path进一步细分接口路径
示例完整资源类:
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.springframework.stereotype.Component; @Component @Path("/files") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public class FileResource { @GET @Path("/list") public String getFileList() { return "{\"files\": [\"file1.txt\", \"file2.jpg\"]}"; } }
3. 确保引入了Jersey Starter依赖
Spring Boot 2.x整合Jersey需要引入官方的starter依赖,否则Jersey的自动配置不会生效。在你的构建文件中添加以下依赖:
Maven(pom.xml):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jersey</artifactId> </dependency>
Gradle(build.gradle):
implementation 'org.springframework.boot:spring-boot-starter-jersey'
4. 确认组件扫描范围
如果你的JerseyConfig或FileResource不在主类App的同包或子包下,需要在@SpringBootApplication中明确指定扫描路径:
@SpringBootApplication(scanBasePackages = "com.yourpackage") public class App { // ... }
完成以上修复后,重启应用,访问http://localhost:8080/api/files/list(根据你定义的路径调整)应该就能正常调用接口了。
内容的提问来源于stack exchange,提问作者Paweł Adamski
相关产品推荐
相关产品推荐

