HttpClient 請求傳參時如何優雅的進行編碼,拒絕url人工拼接
阿新 • • 發佈:2018-11-15
我們在利用HttpClient進行遠端呼叫時,第三方提供的介面如下:
這種介面我們用get、post請求都能呼叫,但是會有一個問題,傳參,@RequestParam 註解表示,傳參非body體,我們只能接在
/updateUserPhoto這個url後面,就是/updateUserPhoto?userId=""&photoUrl="",很多人在編碼時,也總是大學生剛畢業似的,硬性拼接,那麼,到底如何優雅的進行引數傳遞呢?好了,不囉嗦,直接貼程式碼吧
/** * get 方式傳參 * @param url * @param params * @param heads * @return */ public static String get(String url, Map<String, String> params, Map<String, String> heads) { // 獲取連線客戶端工具 CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; try { /* * 由於GET請求的引數都是拼裝在URL地址後方,所以我們要構建一個URL,帶引數 */ URIBuilder uriBuilder = new URIBuilder(url); if (params != null) { for (Map.Entry<String, String> entry : params.entrySet()) { uriBuilder.addParameter(entry.getKey(), entry.getValue()); } } // uriBuilder.setParameters(list); // 根據帶引數的URI物件構建GET請求物件 HttpGet httpGet = new HttpGet(uriBuilder.build()); // 執行請求 response = httpClient.execute(httpGet); // 使用Apache提供的工具類進行轉換成字串 return EntityUtils.toString(response.getEntity()); } catch (ClientProtocolException e) { System.err.println("Http協議出現問題"); } catch (ParseException e) { System.err.println("解析錯誤"); } catch (URISyntaxException e) { System.err.println("URI解析異常"); } catch (IOException e) { System.err.println("IO異常"); } finally { // 釋放連線 if (null != response) { try { response.close(); httpClient.close(); } catch (IOException e) { } } } return null; }
這種方式核心就是URIBuilder類,我們呼叫HttpUtil.get()方法時,只用把引數封裝在map裡面就行,拒絕了url字串拼接,避免粗心大意導致的錯誤,而且十分優雅,高大上!