1. 程式人生 > >HttpClient 請求傳參時如何優雅的進行編碼,拒絕url人工拼接

HttpClient 請求傳參時如何優雅的進行編碼,拒絕url人工拼接

我們在利用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字串拼接,避免粗心大意導致的錯誤,而且十分優雅,高大上!