今天碰到了這么一個問題,我用HttpClient訪問第三方接口的時候出現了第三方接口返回值不統一的情況。
舉例說明:
當訪問A接口的時候,返回值用 JSONObject.parseObject("返回的String") 解析沒問題。
但是當B接口的時候,返回值用 JSONObject.parseObject("返回的String") 就報錯了,用 JSONArray.parseArray("返回的String") 解析沒問題。(用JSONObject.parseArray("返回的String")也不行哦~)
眾所周知,HttpClient我們通常會把他封裝成一個工具類,工具類應保持開閉原則(雖然這里只是一個簡單的工具類,沒有使用設計模式,嘿嘿嘿),所以這就否定了在工具類中單獨加一個方法來適應返回值為JSONArray.parseArray的業務。
解決思路:因為 JSONObject 與 JSONArray 本是一家子,都是 com.alibaba.fastjson 包下的,並且共同是 JSON的子類,所以可以使用泛型解決這個問題。
最終解決方案代碼:
@Test
public void test2() throws Exception{
JSONArray jsonArray = test(JSONArray.class);
System.out.println(jsonArray);
}
/**
*
* @param T 你要選擇的解析結果的類
* @return
* @throws Exception
*/
private <T extends JSON> T test(Class<T> T) throws Exception{
String params = "你HttpClient返回回來的String結果";
String name = T.getName();
Class<?> threadClazz = Class.forName(name);
Method method = threadClazz.getMethod("parseArray", String.class);
Object resultObj = method.invoke(null,params);
return (T)resultObj;
}