SpringBoot访问不到controller的解决方案
作者:Evan Wang
SpringBoot访问不到controller
最近开始学习spring boot,做练习时候访问不到controller,报了404错误。开始以为是没有扫描到的问题,后来发现还有其他原因。下面我们总结一下访问不到controller的错误原因。
首先,出现这个异常说明了跳转页面的url无对应的值.
异常:
This application has no explicit mapping for /error, so you are seeing this as afallback.
解决方案
1. 确认是否扫描到了controller,Application启动类的位置是否正确。
Application启动类的位置不对。要将Application类放在最外侧。即包含所有子包
原因:spring-boot会自动加载启动类所在包下以及其子包下的所有组件。
例如:下图会扫描Application启动类包下(即mycode包)、以及其子包(这里的controller包)。
2. 确认输入项目路径是否正确
如:http://localhost:8080/index,这里需要注意的是端口号的查看。
3.确认注解是否用对
在 Controller 层类上面使用的注解是 @RestController 而并非是 @Controller,或者是 @Controller + @ResponseBody;
详解:
- 如果返回 String 或者 json 的话就直接类上用 @RestController;
- 如果想要页面跳转的话,就使用 @Controller;
- 如果只有在某方法上返回 json,其他方法跳转页面,则在类上添加 @Controller,在需要返回 String 和 json 的方法上添加 @ResponseBody 注解;
4.确认导入项目注解的包地址是否正确
@RequestMapping("/hello") import org.springframework.web.bind.annotation.RequestMapping; @RestController import org.springframework.web.bind.annotation.RestController;
5.控制器的URL路径书写问题
@RequestMapping(“xxxxxxxxxxxxxx”)
实际访问的路径与”xxx”不符合,注意对应一下自己访问的url与@RequestMapping中填写的是否一致,千万别忽略了多了一个空格的问题。
6.配置了上下文路径,使用了server.context-path
这里着重说一下这个问题,这也是博主犯得错误。
我使用的SpringBoot版本为2.1.1,而server.context-path在2.0版本中已经弃用了,采用 server.servlet.context-path。
由于版本的差异导致了配置的上下文路径无效。
SpringBoot版本 | 配置 |
1.x | server.context-path |
2.x | server.servlet.context-path |
建议大家可以专门参考一下spring boot 1.x版本和2.x版本的差别,这样后续学习或者工作过程中有相关问题可以减少很多麻烦。
springboot项目controller访问不到的一种情况
在新创建一个springboot项目时,注意Package下的目录不要太长
如果像上图那样创建项目,最终出来的项目结构中,你的springboot启动类会出现在springboot_demo1包下面,这种情况下,调用controller层会访问不到。
解决办法
将SpringbootDemo1Application类移出当前包,之后就可以正常使用controller层
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。