91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot跨域問題帶來的BUG怎么解決

發布時間:2022-03-01 10:36:02 來源:億速云 閱讀:144 作者:iii 欄目:開發技術

這篇文章主要介紹了springboot跨域問題帶來的BUG怎么解決的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇springboot跨域問題帶來的BUG怎么解決文章都會有所收獲,下面我們一起來看看吧。

需求

前端用了個富文本插件 Ueditor ,插件初始化的時候需要從后端獲取 config 配置。

入坑經歷

首先看下最開始的代碼:

 @RequestMapping(value = "/getConfig")
    public Object getConfig(HttpServletRequest request){
       return readConfig();
    }


 /**
     * 讀取配置文件
     * @return
     */
    private UedConfig readConfig() {
        String path = this.getClass().getResource("/").getPath();
        FileInputStream fileInputStream = new FileInputStream(path + "config/ued_config.json");
        //讀出來,轉成對象返回
        ...
    }

代碼大概就是這樣,然后啟動起來之后,前端告訴我沒有獲取到信息。納尼,我 postman 自測都沒問題,有數據返回。然后阿粉跑去問前端,有報錯嗎?前端說跨域了。當時阿粉就不樂意了,馬上 ctrl+c 加上ctrl+v 把后端處理跨域請求的配置發給前端。然后前端告訴我是 jsonp 請求跨域。阿粉一臉懵逼??? jsonp 跨域?沒聽說過啊。馬上找度娘去,果然一搜全是處理方式。因為是 springboot 項目,所以找了個最簡單的。看代碼:

@ControllerAdvice
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
    public JsonpAdvice(){
        super("callback");
    }
}

看,是不是很簡單。要是 AbstractJsonpResponseBodyAdvice 這個單詞下面沒有紅線就更完美了。沒有引入類嗎?怎么難得倒阿粉呢。alt + enter,嗯哼,什么情況,沒有這個類?不可能啊。馬上問度娘一下,原來這個類是 springboot 2.0以下才有。那怎么辦呢?2.0以上好像沒有處理 jsonp 跨域的方式啊。阿粉又在百度搜啊搜,果然,皇天不負有心人,阿粉看到 jackson 里面有個類 JSONPObject 可以處理,然后阿粉改了一下代碼:

@RequestMapping(value = "/getConfig")
public Object getConfig(String callback,HttpServletRequest request){
    return new JSONPObject(callback,readConfig());
}

然后重啟,自測沒問題。讓前端試下,可以正常獲取。OK,完美。

后面項目完成了,前后端也對接完了,發到測試環境,讓測試人員測試。Duang~一個bug扔阿粉頭上,獲取配置失敗。不可能啊,肯定是前端的問題,跑去找前端讓前端看下。前端看了之后給我來了一句,測試環境不跨域。瞬間一萬頭草尼瑪從頭上飄過。阿粉辛辛苦苦花了幾個小時才把跨域問題處理了,你給我說測試環境不跨域。

哎,沒辦法,這口鍋只能自己含淚抗下了。然后阿粉又改了一次代碼:

@RequestMapping(value = "/getConfig")
public Object getConfig(String callback,HttpServletRequest request){
    return StringUtils.isEmpty(callback) ? readConfig() : new JSONPObject(callback,readConfig());
}

還是做了個兼容,因為前端還需要連我本地調試。不過這次應該沒有問題了吧,阿粉心里還是有些小得意。提交代碼,發測試,搞定。

Duang~同樣的bug再一次扔在了阿粉臉上。心都涼了,怎么回事呢?日志也沒報錯啊。搗鼓半天,不知道什么原因,阿粉只能加寫log,因為在測試環境不好調試,也沒報錯。然后讓運維配合一下,然后發現 this.getClass().getResource("/").getPath() 得到的路徑不對,阿粉再一次一臉懵逼,這個不是獲取項目根路徑嗎?怎么回事呢。

然后阿粉又厚著臉皮找度娘,果然一下就找到原因了,因為 springboot 集成了tomcat,項目直接是打成 jar 包運行的,不能通過 this.getClass().getResource("/").getPath() 這種獲取項目根路徑的方式來獲取,只能通過流的方式,然后阿粉又改了下代碼:

/**
     * 讀取配置文件
     * @return
     */
private UedConfig readConfig() {
    InputStream resourceAsStream = this.getClass().getResourceAsStream("/"+"config/ued_config.json");
    //讀出來,轉成對象返回
    ...
}

關于“springboot跨域問題帶來的BUG怎么解決”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“springboot跨域問題帶來的BUG怎么解決”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丘北县| 阿合奇县| 黔西县| 金门县| 拜泉县| 仁寿县| 深州市| 汉中市| 承德县| 阜平县| 高邮市| 忻州市| 阳城县| 湟源县| 聂荣县| 张家界市| 长寿区| 荣成市| 伊金霍洛旗| 盱眙县| 皋兰县| 洛浦县| 奈曼旗| 郑州市| 民权县| 武定县| 岚皋县| 达日县| 吉林市| 应用必备| 溧水县| 乌兰浩特市| 大邑县| 遂溪县| 平邑县| 靖宇县| 琼结县| 郑州市| 桃园县| 肥城市| 于田县|