本文共 1596 字,大约阅读时间需要 5 分钟。
总结一下自己学习过程中遇到的问题,在SpringMVC中ajax中的的url请求可以直接跳转到对应控制类的映射地址,而将相同的项目代码移植到SpringBoot中后却发现此功能失效了,一开始以为是代码出错自己反复检查了好久,后来经老师点拨发现是ajax所在的html页面的启动端口是63342:项目代码如下
用户注册 请输入账号:
请输入用户名:
请输入密码:
html文件路径:/templates/register.html
控制类部分代码如下:
@Controller@CrossOrigin(origins ="*",maxAge = 3600)public class registerController { @ResponseBody @RequestMapping("/register") public String register(@RequestBody String json) throws IOException { String data; System.out.println("--------------------------------------------------"); System.out.println(json); ObjectMapper mapper = new ObjectMapper(); User user = mapper.readValue(json, User.class); int userNo = user.getUserNo(); String userName = user.getUserName(); String password = user.getPassword(); System.out.println("--------------------------------------------------"); if(userNo==10011&&"张三".equals(userName)&&"123456".equals(password)){ data="注册成功,请登录"; return data; }else{ data= "注册失败"; return data; } }}
在原本的SpringMVC项目中,ajax中url的值是"/register",它能指向控制类"/register"映射的原因是:SpringMVC框架的前端页面都是由Tomcat启动,走的是统一的8080端口,而在SpringBoot项目中,由于它是内嵌的Tomcat,因此控制类依旧走的8080端口,而自己编写的html页面却不经过Tomcat服务器,因此就造成了ajax请求跨域的问题。
此解决方案仅针对于当前的问题域:
在ajax请求中的url应指向控制类映射地址的具体路径,包括端口号
url:"http://localhost:8080/register"
在对应的控制类中添加注解
@CrossOrigin(origins ="*",maxAge = 3600)接收相应端口的请求,这里的*是通配符,由于是自己做的项目所以没有考虑安全问题,建议都设置成请求地址的端口号来一一匹配。
转载地址:http://sfcki.baihongyu.com/