調用三方介面返回值JSON字元串帶BOM頭"\ufeff",JSON解析死活報錯。 我是用SpringBoot的 調用三方介面的,一開始返回值我是用對象接收返回值,發現一直報錯,我以為是 的接收轉換有問題,就將返回值換成了 類型去接收。接收到字元串後再轉JSON、JSON字元串解析死活報錯。 介面返 ...
調用三方介面返回值JSON字元串帶BOM頭"\ufeff",JSON解析死活報錯。
我是用SpringBoot的
RestTemplate
調用三方介面的,一開始返回值我是用對象接收返回值,發現一直報錯,我以為是RestTemplate
的接收轉換有問題,就將返回值換成了String
類型去接收。接收到字元串後再轉JSON、JSON字元串解析死活報錯。
介面返回值日誌如下:
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還是個好玩意啊。
終於發現問題所在解決就輕鬆多了。
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());