前端和后端交互的时候,再三确定前端传送的数据在后面接受的对象里都有,但是报了这个错:
Access to XMLHttpRequest at 'http://localhost:8080/admin/login' from origin 'http://localhost:63342' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
大意就是请求被CORS策略阻止。
然后看了下后端的代码,原因是获取使用@RequestBody注解出现了异常,跳转到了错误处理程序,错误处理程序返回错误,被浏览器拦截了。所以,请求是没有问题的,服务器处理出错了
查询了很多资料无过,但是最后发现注解里设置required设置为false @RequestBody(required=false) 就可以得到数据。
具体原因不明,等待以后找到答案
其他:前端使用的是axios 发起请求:(一定使用data:{}格式,不要使用JSON.stringfy()方法)
2019/10/27找到了原因:
vue 发送json ,会导致此次请求被认为是一次复杂的请求,所以会发送两次请求(为什么会发送两次请自行查询 ),第一次不带任何数据,服务端口的@RequeseBody 会默认请求的数据为空时报错。
解决办法:
1 如上: 加上required=false参数,不检查数据是否为空
2 使用拦截器,通过request.getMethod(),得到请求方法,如果是OPTIONS 就直接返回,特别注意返回时要带上响应头以允许这次跨域访问(为什么要允许跨域访问自行查询)