Spring JAX-RS新增REST服务访问返回404无日志输出问题
问题根因
核心故障点是新增REST服务类的包声明配置错误,该类根本没有被Spring/JAX-RS的组件扫描逻辑识别,没有注册为可用的REST资源,因此请求直接返回404,且由于类从未被容器加载初始化,自然不会输出任何业务日志。
对比两个服务类的包声明即可发现差异:
- 正常运行的
HelloService包声明为package it.sella.imel.api.rest;,符合Maven项目的包路径规则,在组件扫描的覆盖范围内,因此可以正常响应请求。 - 新增的
ListaPWG包声明错误写为package src.main.java.it.sella.imel.api.rest;。Maven项目中src/main/java是源码根目录的固定标识,不属于实际业务包名的一部分,错误的包名导致该类完全落在组件扫描的路径范围外,容器根本感知不到这个REST资源的存在。
Maven可以正常编译该类的原因是:编译阶段仅校验代码语法、依赖引用合法性,包路径与组件扫描范围不匹配属于运行时逻辑问题,不会触发编译报错。
修复方案
按以下步骤调整即可解决问题:
- 修改
ListaPWG类第一行的包声明,删除开头错误的src.main.java.前缀,改为正确的包声明:
package it.sella.imel.api.rest;
- 调整类文件的磁盘存放路径,将当前存放在错误路径
src/main/java/src/main/java/it/sella/imel/api/rest/ListaPWG.java的文件,移动到Maven标准源码路径src/main/java/it/sella/imel/api/rest/ListaPWG.java,保证文件系统路径和类内的包声明完全匹配。 - 执行Maven clean后重新编译部署项目,再通过浏览器访问
http://localhost:8080/IMEL/resources/listapwg,即可正常得到GET接口的返回内容。
后续可选检查项
如果完成上述步骤后仍有异常,可按以下点排查:
- 类中定义的
fetchListaPWG是POST类型接口,无法通过浏览器地址栏直接访问(浏览器地址栏默认发起GET请求),测试该接口需要使用接口测试工具发送POST请求。 @Logged是JAX-RS规范的@NameBinding注解,后续如果加回该注解,需要确认项目中存在标注了@Logged的对应请求/响应过滤器实现,否则接口会被过滤器逻辑拦截无法响应。你之前测试去掉注解仍无法访问,是因为包路径错误的故障优先级更高,和该注解本身无关。- 部署后可以检查编译输出目录
target/classes下的类存放路径,确认ListaPWG.class位于it/sella/imel/api/rest/目录下,不存在多余的src/main/java路径层级。
内容的提问来源于stack exchange,提问作者EOTheDev
相关产品推荐
相关产品推荐

