1. 程式人生 > >微服務訊息傳輸過程中的一些問題

微服務訊息傳輸過程中的一些問題

今天是週六,在公司加班完成一個基於微服務架構的專案,出現了一個很尷尬、很詭異的問題,在此記錄該問題

當用戶登入時,使用者微服務需要呼叫許可權認證服務返回該使用者擁有的所有角色名稱,為了減少服務呼叫次數,所以許可權認證服務的返回資料時 Map<Integer, List<String>> 即 Map<userid,List<rolename>>,但是問題出現了,當用戶服務通過Feign去呼叫許可權服務時,用Integer 型別的userid去從Map中查詢角色資訊卻找不到了,containsKey(userid)也顯示不包含該userid,但是卻可以列印map,,卻可以打印出該userid,  難道是Map.containsKey有問題 ? ? ? 突然,我想到一件事情,會不會是由於服務呼叫過程中,SpringBoot在做資料型別設定時,將Integer變成String型別了 ??? 然後,我就將Map<Integer, List<String>>變成 Map<String, List<String>> ,然後再講userid也變為String型別,然後就成功了。。。

總結:在微服務的資訊資料傳輸過程中,如果需要讓SpringBoot做資料格式的包裝,最好還是以String型別做為Key,不要使用Integer,因為Spring在解析JSON資料時,有可能直接把Key當做Integer型別的字串當做String型別進行封裝了。