前端和后端交互的時候窿给,再三確定前端傳送的數(shù)據(jù)在后面接受的對象里都有笛求,但是報了這個錯:
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注解出現(xiàn)了異常架馋,跳轉(zhuǎn)到了錯誤處理程序实昨,錯誤處理程序返回錯誤歹撒,被瀏覽器攔截了应役。所以,請求是沒有問題的唆阿,服務(wù)器處理出錯了
查詢了很多資料無過益涧,但是最后發(fā)現(xiàn)注解里設(shè)置required設(shè)置為false @RequestBody(required=false)?就可以得到數(shù)據(jù)。
具體原因不明驯鳖,等待以后找到答案
其他:前端使用的是axios?發(fā)起請求:(一定使用data:{}格式闲询,不要使用JSON.stringfy()方法)
2019/10/27找到了原因:
? ? vue?發(fā)送json ,會導(dǎo)致此次請求被認(rèn)為是一次復(fù)雜的請求浅辙,所以會發(fā)送兩次請求(為什么會發(fā)送兩次請自行查詢 )扭弧,第一次不帶任何數(shù)據(jù),服務(wù)端口的@RequeseBody? 會默認(rèn)請求的數(shù)據(jù)為空時報錯记舆。
解決辦法:
1? ? 如上: 加上required=false參數(shù)鸽捻,不檢查數(shù)據(jù)是否為空
2?使用攔截器,通過request.getMethod()泽腮,得到請求方法御蒲,如果是OPTIONS?就直接返回,特別注意返回時要帶上響應(yīng)頭以允許這次跨域訪問(為什么要允許跨域訪問自行查詢)