調用三方接口返回值JSON字符串帶BOM頭"ufeff",JSON解析死活報錯。java
我是用SpringBoot的RestTemplate
調用三方接口的,一開始返回值我是用對象接收返回值,發現一直報錯,我覺得是RestTemplate
的接收轉換有問題,就將返回值換成了String
類型去接收。接收到字符串後再轉JSON、JSON字符串解析死活報錯。
接口返回值日誌以下:web
2020-03-25 13:18:55.687 DEBUG 8595 --- [ main] o.s.web.client.RestTemplate : Response 200 OK 2020-03-25 13:18:55.688 DEBUG 8595 --- [ main] o.s.web.client.RestTemplate : Reading to [java.lang.String] as "application/json;charset=UTF-8" 2020-03-25 13:19:57.370 DEBUG 8595 --- [ main] com.hopefun.scm.open.api.EyuanApi : 返回值:{"message":"成功","code":"1"}
在IDEA開發過程當中,一開始光看返回值打印的日誌是看不出來任何毛病的,而且我將這個返回值的JSON字符串複製到Sublime編輯器中也看不出問題所在。一開始很自信沒有Debug查看返回值,後來當我開啓了Debug模式後終於發現了問題所在。原來在JSON字符串前面還帶着"ufeff",致使JSON字符串解析報錯,原來罪魁禍首是這個玩意"ufeff"。Debug仍是個好玩意啊。json
終於發現問題所在解決就輕鬆多了。api
public static final String BOM = "\ufeff"; /** * 去除BOM * * @param bomStr JSON字符串 * @return 去除BOM後的JSON字符串 */ private String recursiveBom(String bomStr) { String str = ""; if (bomStr.startsWith(BOM)) { str = bomStr.substring(1); if (str.startsWith(BOM)) { recursiveBom(str); } } return str; } //使用,如此得出來的字符串就是純正的JSON字符串啦。媽媽不再怕解析報錯啦。。。 recursiveBom(bomStr.trim());
趙小胖我的博客app