问题提示
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
这是spring提示你找不到对应符合的映射。
首先你先确保前端url地址是不是写对,再看看后端controller层的映射RequestMapping是不是写对,同时要注意有没有把controller注册到spring容器中,
最后再看看你启动类是不是写错地方了,因为我看了另一篇CSDN的博客说:“启动类放的位置不对,启动类所在的package必需要包含Controller所在的package”,你可以尝试看看,一般用idea自动创建springboot,你移动启动类这个问题是不存在的。
再再最后……如果前端请求还是不能正常访问,而你自认为你没有写错url等,也许你和我犯了一样的错误。
创建一个简单的Demo
1.目录结构
2.Controller
简单的两个映射文件
3.index.html页面
4.application.properties文件
指定项目启动的工程名,注意springboot1.0和springboot2.0在这里写法是不一样的。
#springboot 2.0
server.servlet.context-path=/myDemo
#springboot 1.0
#server.context-path=/myDemo
5.启动项目
项目启动没有报错
再输入框内输入内容,点击发送按钮,前端未获得响应字符串,后台也没有打印输出。
点击test链接,显示错误页面,提示没有找到映射。
但是又没有感觉写错了……
6.分析
首先a链接地址是:/myDemo/test
<a href="/myDemo/test">test</a>
也许你会觉得是少了“http://localhost:8080”等类似的字符串,你大可加上去试试……而且我们从报错页面的地址可以看出,跳转的时候系统自动为我们在/myDemo/test前面添加了localhost等 。
再来看看我写的controller
@RestController
@RequestMapping("/myDemo")
public class TestController {
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String hello(@RequestParam("name") String name){
System.out.println("run");
return "hello:"+name;
}
@RequestMapping(value = "/test",method = RequestMethod.GET)
public String test(){
System.out.println("111");
return"test";
}
}
最外面的@RequestMapping映射的地址是/myDemo,里面函数部分的@RequestMapping分别映射的地址是/hello和/test。
情不自禁结合来看就是/myDemo/hello和/myDemo/test,感觉和前端写的地址也是吻合的……
7.问题
我遗忘了配置的工程名:server.servlet.context-path=/myDemo
有人肯定会说,a链接和ajax的url里面不是写了/myDemo了?
但我说数量上不对,我们先来看修改后的结果:
现在映射正常了,我在每个url地址里面多了加了一个/myDemo。
比如/myDemo/myDemo/xxxx,第一个/myDemo对应的是我配置的工程名,第二个/myDemo对应的是controller里面外围的RequestMapping,最后的/xxx才是对应函数体上的RequestMapping。
我们再来看看之前/myDemo/test,现在看来/myDemo用来对应工程名后,spring去找一个可以映射/test的Controller去了,你可以另外写一个controller测试下。
解决办法: 1.不配置工程名
2.每个链接都加上工程名,最后工程名不用来作为Controller层的映射
3.有些编译器好像可以配置启动路径(工程名)