1.Vue 前端跨域配置,开发调试阶段推荐这样使用!
devServer: {
proxy: { // 配置跨域
'/api': {
target: 'http://localhost/Apis', // 这里后台的地址模拟的;应该填写你们真实的后台接口
changOrigin: true, // 允许跨域
pathRewrite: {
/*
我们使用的时候,比如login请求:/api/login
重写路径,当我们在浏览器中看到请求的地址为
http://localhost:9528/api/login 时
实际上访问的地址是:
http://localhost/Apis/login, 记得通过'^/api': '' 把/api去掉,不然实际请求会多出一个/api,会变成http://localhost/Apis/api/login
如何验证?:使用工具访问 http://localhost:8080/api/core/getData/userInfo
*/
'^/api': ''
}
}
}
},
2.通过Vue 解决前端跨域问题,但是 post请求接收不到 requestBody?
在调试请求时,先用工具调试。如idea 自带的REST Client
后端接收到请求,提示:
Unexpected character ('t' (code 116)): was expecting double-quote to start field name
后面发现是发送的请求的key值不带冒号,所以有如下两种方式处理:
@RequestBody 会把接收到的对象进行自动转换,转换的对象是你申明的对象。如下方的String,UserForm
//1.key不带冒号,可以转换为string,map解析。
loginForm = {username: "admin", password: "111111"}
@PostMapping(value = "/login")
@ResponseBody
public Result<String> loginIn(@RequestBody String loginForm) {
Map ob= (Map) JSONObject.parse(loginForm);
String name = (String) ob.get("username");
String pass = (String) ob.get("password");
}
//2.key带冒号,可以直接转换对象,注意UserForm 的key要与RequestBody 的username,password保持一致
loginForm = {”username“: "admin", ”password“: "111111"}
@PostMapping(value = "/login")
@ResponseBody
public Result<String> loginIn(@RequestBody UserForm loginForm) {
String name = loginForm.getUsername;
String pass = loginForm.getPassword;
}
3.REST Client 直接调试通了,但是调试跨域之后的地址,还是无法接收到requestBody?
访问跨域后的地址,访问失败!
直接访问请求地址,不是访问经过跨域后的地址,成功!
先判断访问这个跨域的地址是否进入了请求,打断点发现没有进入后台post请求loginIn,难道跨域失败,不是访问实际的接口http://localhost/Apis/login,后台先把Apis/login这个接口拦截看看,是否访问了这个接口。打断点发现实际上是访问到了。
REST Client 访问跨域后的地址:
后台拦截到访问的地址:
也就是这个接口已经接收到了,放行之后,还是无法进入loginIn接口。也就是说,这个请求参数可能是不存在的。添加一个新的loginIn测试接口,测试如下:
也就是,有参数的接口是无法进入的,但是无参数的接口是可以进入的。换句话说,有参数的接口requestBody,转换为指定参数String时,出错了。验证下:
直接访问接口调试,可以进入接口,获取到requestBody。那后端是没问题,也就是Vue前端访问请求出现了问题,具体就是这个请求体。开始调试前端!
Vue 前端发送的requestBody会不会被有问题?前端有通过mock模拟ajax请求,看看mock有没有特殊操作。看相关文档,有一个地方对body进行了操作:
屏蔽截图中的代码,重新运行项目,注意是重新运行Vue项目!后台可以接收到Vue发送的post /Apis/login请求!
部署参考:https://blog.csdn.net/yys190418/article/details/107217457/