Spring Boot应用运行正常,访问UserController接口返回404错误
Spring Boot 接口返回404 排查解决步骤
当前代码可正常启动、依赖齐全,但访问/users相关接口返回404,按出现概率从高到低排查:
1. 最高发原因:包扫描规则不匹配
Spring Boot 默认只会扫描主启动类(带@SpringBootApplication注解的类)所在的包及其所有子包下的组件类(包括标注了@RestController的类)。
你的UserController当前的包路径是独立的根包controller,如果主启动类建在比如com.xxx.project这类业务根包下,controller包和主启动类包是平级关系,完全不在默认扫描路径范围内,Spring根本没有把这个Controller注册到Web容器里,自然访问就会404。
对应解决方法:
- 方案一:调整Controller的包路径,移动到主启动类所在包的子目录下,比如主启动类在
com.demo,就把UserController的包改成com.demo.controller - 方案二:如果不想调整包路径,直接在主启动类上显式指定扫描范围:
@SpringBootApplication(scanBasePackages = {"controller", "其他需要扫描的业务包路径"}) public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
2. 检查全局上下文路径配置
如果项目在配置文件中设置了server.servlet.context-path(全局访问前缀),实际接口的完整路径会自动带上这个前缀,直接按原注释里的localhost:8080/users访问就会404。
- 检查配置文件(
application.properties或application.yml)的配置项:
比如yml配置里如果有:
那实际访问地址需要改成server: servlet: context-path: /applocalhost:8080/app/users
3. 验证接口映射是否被成功注册
启动项目后,在控制台日志中搜索/users,如果能看到类似如下的日志输出,说明接口注册成功:
Mapped "{[/users],methods=[GET]}" onto public java.lang.String controller.UserController.getUser()
如果完全找不到对应的映射日志,直接回到第一步排查包扫描问题即可。
4. 核对请求方法是否匹配
当前Controller的接口映射规则是:
- GET请求
/users→ 返回"get the user" - POST请求
/users→ 返回"create user" - PUT请求
/users→ 返回"update user" - DELETE请求
/users→ 返回"delete user"
注意:如果请求的路径正确但HTTP方法不匹配,部分版本的Spring Boot也会返回404,不要用浏览器直接输入地址(默认发GET请求)去测试POST/PUT/DELETE对应的接口。
额外说明:代码里
creteUser存在拼写失误,正确拼写应为createUser,但这个问题不影响接口映射逻辑,不会导致404,仅为代码不规范问题。
内容的提问来源于stack exchange,提问作者abhinav gautam
相关产品推荐
相关产品推荐

