0


【SpringBoot】7 种实现 HTTP 调用的方式

作者在工作中,遇到一些需要调用三方接口的任务,就需要用到 HTTP 调用工具。这里,我总结了一下 实现 HTTP 调用的方式,共有 7 种(后续会继续新增),分别如下:

  • HttpClient
  • OkHttp
  • OKHttpUtil
  • Jodd HTTP
  • Hutool HTTP
  • RestTemplate
  • forest

1. HttpClient

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.6</version></dependency>
publicclassHttpClientUtil{publicstaticStringget(String url,Map<String,String> urlParam,Map<String,String> header,boolean ssl){returnget(url, urlParam, header,CharEncoding.UTF_8, ssl);}publicstaticStringget(String url,Map<String,String> urlParams,Map<String,String> headers,String charSet,boolean ssl){HttpGet httpGet =newHttpGet(charSet ==null?addParams(url, urlParams):addParamsWithCharSet(url, urlParams, charSet));returngetResponse(httpGet, charSet, headers, ssl);}// 以请求体JSON发送数据publicstaticStringpostJson(String url,Map<String,String> urlParams,Map<String,String> headers,String data,boolean ssl){HttpPost httpPost =newHttpPost(addParams(url, urlParams));
        httpPost.setEntity(newStringEntity(data,ContentType.APPLICATION_JSON));returngetResponse(httpPost,CharEncoding.UTF_8, headers, ssl);}// 以表单的形式发送数据publicstaticStringpostForm(String url,Map<String,String> urlParams,Map<String,String> headers,Map<String,String> data,boolean ssl){HttpPost httpPost =newHttpPost(addParams(url, urlParams));ContentType contentType =ContentType.create("application/x-www-form-urlencoded",Consts.UTF_8);if(Objects.isNull(headers)){
            headers =newHashMap<>();}
        headers.put("Content-Type", contentType.toString());List<NameValuePair> list =newArrayList<>();for(Map.Entry<String,String> entry : data.entrySet()){
            list.add(newBasicNameValuePair(entry.getKey(), entry.getValue()));}if(list.size()>0){UrlEncodedFormEntity entity =null;try{
                entity =newUrlEncodedFormEntity(list,CharEncoding.UTF_8);}catch(UnsupportedEncodingException e){
                e.printStackTrace();}
            httpPost.setEntity(entity);}returngetResponse(httpPost,CharEncoding.UTF_8, headers, ssl);}// 获取响应数据privatestaticStringgetResponse(HttpRequestBase httpRequestBase,String charSet,Map<String,String> headers,boolean ssl){CloseableHttpClient httpClient =null;try{
            httpClient = ssl ?getHttpClient():HttpClients.createDefault();
            httpRequestBase.setConfig(getRequestConfig());if(headers.size()>0){
                httpRequestBase.setHeaders(getHeaders(headers));}CloseableHttpResponse response = httpClient.execute(httpRequestBase);int statusCode = response.getStatusLine().getStatusCode();if(HttpStatus.SC_OK== statusCode){HttpEntity entity = response.getEntity();String res =EntityUtils.toString(entity, charSet);EntityUtils.consume(entity);return res;}}catch(Exception e){
            e.printStackTrace();}finally{try{if(Objects.nonNull(httpClient)){
                    httpClient.close();}}catch(IOException e){
                e.printStackTrace();}}thrownewRuntimeException("调用失败");}privatestaticRequestConfiggetRequestConfig(){returnRequestConfig.custom().setConnectTimeout(6000*2).setConnectionRequestTimeout(6000*2).setSocketTimeout(6000*2).build();}privatestaticStringaddParams(String url,Map<String,String> params){returnaddParamsWithCharSet(url, params,CharEncoding.UTF_8);}privatestaticStringaddParamsWithCharSet(String url,Map<String,String> params,String charSet){if(params ==null|| params.isEmpty()){return url;}StringBuilder sb =newStringBuilder();try{for(Map.Entry<String,String> entry : params.entrySet()){
                sb.append("&").append(entry.getKey()).append("=");
                sb.append(charSet ==null? entry.getValue():URLEncoder.encode(entry.getValue(), charSet));}if(!url.contains("?")){
                sb.deleteCharAt(0).insert(0,"?");}}catch(Exception e){
            e.printStackTrace();}return url + sb;}// HTTPS client 创建publicstaticCloseableHttpClientgetHttpClient(){X509TrustManager trustManager =newX509TrustManager(){@OverridepublicvoidcheckClientTrusted(X509Certificate[] x509Certificates,String s)throwsCertificateException{}@OverridepublicvoidcheckServerTrusted(X509Certificate[] x509Certificates,String s)throwsCertificateException{}@OverridepublicX509Certificate[]getAcceptedIssuers(){returnnull;}};SSLContext context =null;try{
            context =SSLContext.getInstance("SSL");
            context.init(null,newTrustManager[]{trustManager},null);returnHttpClients.custom().setSSLSocketFactory(newSSLConnectionSocketFactory(context)).build();}catch(Exception e){
            e.printStackTrace();thrownewRuntimeException(e.getMessage());}}// 设置请求头privatestaticHeader[]getHeaders(Map<String,String> header){if(header.size()==0){returnnewHeader[]{};}List<Header> headers =newArrayList<>();for(String key : header.keySet()){
            headers.add(newBasicHeader(key, header.get(key)));}return headers.toArray(newHeader[]{});}}

使用:

@RestController@RequestMapping("/test")publicclassTestController{@GetMapping("/queryById")publicStringqueryById(String id){Map<String,String> params =newHashMap<>();Map<String,String> headers =newHashMap<>();
        params.put("id", id);
        headers.put("X-Access-Token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODcxNjM4MDcsInVzZXJuYW1lIjoibGlqaW5nIn0.BUeqjiBQrH0DCfciRQsWo1P1XOoIxXNuNaM27vjAmys");String url ="http://localhost:20001/test/queryById";returnHttpClientUtil.get(url, params, headers,false);}@PostMapping("/add")publicStringadd(){Map<String,String> headers =newHashMap<>();
        headers.put("X-Access-Token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODcxNjM4MDcsInVzZXJuYW1lIjoibGlqaW5nIn0.BUeqjiBQrH0DCfciRQsWo1P1XOoIxXNuNaM27vjAmys");UserVo userVo =newUserVo();
        userVo.setId(1L);
        userVo.setName("zzc");String url ="http://localhost:20001/test/add";returnHttpClientUtil.postJson(url,null, headers,JSON.toJSONString(userVo),false);}}

2.OkHttp

<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.14.7</version></dependency>
publicclassOkHttpUtil{privatestaticvolatileOkHttpClient okHttpClient =null;privatestaticvolatileSemaphore semaphore =null;privateMap<String,String> headerMap;privateMap<String,Object> paramMap;privateString url;privateRequest.Builder request;privateString body;privateOkHttpUtil(){if(Objects.isNull(okHttpClient)){synchronized(OkHttpUtil.class){if(Objects.isNull(okHttpClient)){TrustManager[] trustManagers =buildTrustManager();
                    okHttpClient =newOkHttpClient.Builder().connectTimeout(15,TimeUnit.SECONDS).writeTimeout(20,TimeUnit.SECONDS).readTimeout(20,TimeUnit.SECONDS).sslSocketFactory(createSSLSocketFactory(trustManagers),(X509TrustManager)trustManagers[0]).hostnameVerifier((hostname, session)->true).retryOnConnectionFailure(true).build();addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36");}}}}publicOkHttpUtilinitGet(){
        request =newRequest.Builder().get();StringBuilder builder =newStringBuilder(url);if(Objects.nonNull(paramMap)){
            builder.append("?");
            paramMap.forEach((key, value)->{try{
                    builder.append(URLEncoder.encode(key,"utf-8")).append("=").append(URLEncoder.encode((String)value,"utf-8")).append("&");}catch(UnsupportedEncodingException e){
                    e.printStackTrace();}});
            builder.deleteCharAt(builder.length()-1);}
        request.url(builder.toString());returnthis;}publicOkHttpUtilinitPost(boolean isJson){RequestBody requestBody =null;if(isJson){
            requestBody =RequestBody.create(MediaType.parse("application/json; charset=utf-8"), body);}else{FormBody.Builder formBody =newFormBody.Builder();if(Objects.nonNull(paramMap)){
                paramMap.forEach((x, y)-> formBody.add(x,(String) y));}
            requestBody = formBody.build();}
        request =newRequest.Builder().post(requestBody).url(url);returnthis;}/**
     * @Description:同步请求
     * @Author: zzc
     * @Date: 2022-12-04 18:06
     * @return: java.lang.String
     **/publicStringsync(){setHeader(request);try{Response result = okHttpClient.newCall(request.build()).execute();if(Objects.nonNull(result)){return result.body().string();}}catch(IOException e){
            e.printStackTrace();}return"请求失败";}/**
     * @Description:异步请求,有返回值
     * @Author: zzc
     * @Date: 2022-12-04 18:05
     * @return: java.lang.String
     **/publicStringasync(){StringBuffer buffer =newStringBuffer();setHeader(request);
        okHttpClient.newCall(request.build()).enqueue(newCallback(){@OverridepublicvoidonFailure(Call call,IOException e){
                buffer.append("请求出错").append(e.getMessage());}@OverridepublicvoidonResponse(Call call,Response response)throwsIOException{if(Objects.nonNull(response.body())){
                    buffer.append(response.body().string());getSemaphore().release();}}});try{getSemaphore().acquire();}catch(InterruptedException e){
            e.printStackTrace();}return buffer.toString();}privatestaticSemaphoregetSemaphore(){synchronized(OkHttpUtil.class){if(Objects.isNull(semaphore)){
                semaphore =newSemaphore(0);}}return semaphore;}publicstaticOkHttpUtilbuilder(){returnnewOkHttpUtil();}publicOkHttpUtilurl(String url){this.url = url;returnthis;}publicOkHttpUtiladdParam(String key,String value){if(Objects.isNull(paramMap)){
            paramMap =newLinkedHashMap<>(16);}
        paramMap.put(key, value);returnthis;}publicOkHttpUtiladdBody(String body){this.body = body;returnthis;}publicvoidsetHeader(Request.Builder request){if(Objects.nonNull(headerMap)){
            headerMap.forEach(request::addHeader);}}publicOkHttpUtiladdHeader(String key,String value){if(Objects.isNull(headerMap)){
            headerMap =newLinkedHashMap<>(16);}
        headerMap.put(key, value);returnthis;}/**
     * @Description:生成安全套接字工厂,用于Https请求的证书跳过
     * @Author: zzc
     * @Date: 2022-11-30 16:03
     * @param trustManagers:
     * @return: javax.net.ssl.SSLSocketFactory
     **/privatestaticSSLSocketFactorycreateSSLSocketFactory(TrustManager[] trustManagers){SSLSocketFactory sslSocketFactory =null;try{SSLContext ssl =SSLContext.getInstance("SSL");
            ssl.init(null, trustManagers,newSecureRandom());
            sslSocketFactory = ssl.getSocketFactory();}catch(Exception e){
            e.printStackTrace();}return sslSocketFactory;}privatestaticTrustManager[]buildTrustManager(){returnnewTrustManager[]{newX509TrustManager(){@OverridepublicvoidcheckClientTrusted(X509Certificate[] x509Certificates,String s)throwsCertificateException{}@OverridepublicvoidcheckServerTrusted(X509Certificate[] x509Certificates,String s)throwsCertificateException{}@OverridepublicX509Certificate[]getAcceptedIssuers(){returnnewX509Certificate[]{};}}};}}
publicinterfaceICallback{voidonSuccess(Call call,String data);voidonFail(Call call,String errorMsg);}

使用:

@RestController@RequestMapping("/ok")publicclassOkHttpController{@GetMapping("/getByNoParams")publicStringgetByNoParams(){String result =OkHttpUtil.builder().url("http://localhost:8080/http/listUsers").initGet().sync();System.out.println(result);return"get";}@GetMapping("/get")publicStringget(){String result =OkHttpUtil.builder().url("http://localhost:8080/http/getUserById").addParam("id","1").initGet().sync();System.out.println(result);return"get";}@GetMapping("/postByNoParams")publicStringpostByNoParams(){String result =OkHttpUtil.builder().url("http://localhost:8080/http/listUserList").initPost(false).sync();System.out.println(result);return"post";}@GetMapping("/post")publicStringpost(){String result =OkHttpUtil.builder().url("http://localhost:8080/http/getUserVoById").addParam("id","1")//.addHeader().initPost(false).sync();System.out.println(result);return"post";}}

3.OKHttpUtil

在 Java 的世界中,Http 客户端之前一直是 Apache 家的

HttpClient

占据主导,但是由于此包较为庞大,API 又比较难用,因此并不使用很多场景。而新兴的

OkHttp

Jodd-http

固然好用,但是面对一些场景时,学习成本还是有一些的。针对

OKHttp

,**

OkHttpUtil

** 做了一层封装,使 Http 请求变得无比简单。

<dependency><groupId>io.github.admin4j</groupId><artifactId>http</artifactId><version>0.4.0</version></dependency>
publicclassOkHttpUtil{publicstaticJSONObjectget(String url,Map<String,Object> queryParams)throwsIOException{Response response =HttpUtil.get(url, queryParams);returnJSONObject.parseObject(response.body().string());}publicstaticJSONObjectget(String url,Map<String,Object> queryParams,Map<String,Object> headers)throwsIOException{HttpRequest httpRequest =HttpRequest.get(url);setParams(queryParams, httpRequest);Response response = httpRequest.queryParams().headers(headers).execute();returnJSONObject.parseObject(response.body().string());}publicstaticJSONObjectpost(String url,String json)throwsIOException{Response response =HttpUtil.post(url, json);assert response.body()!=null;returnJSONObject.parseObject(response.body().string());}publicstaticJSONObjectpostForm(String url,Map<String,Object> formParams)throwsIOException{Response response =HttpUtil.postForm(url, formParams);assert response.body()!=null;returnJSONObject.parseObject(response.body().string());}publicstaticJSONObjectpost(String url,String json,Map<String,Object> headers)throwsIOException{HttpRequest httpRequest =HttpRequest.post(url);
        httpRequest.setBody(json);Response response = httpRequest.headers(headers).execute();returnJSONObject.parseObject(response.body().string());}privatestaticvoidsetParams(Map<String,Object> queryParams,HttpRequest httpRequest){List<Pair> pairs =newArrayList<>(queryParams.size());
        queryParams.forEach((x, y)-> pairs.add(Pair.of(x, y)));if(pairs.size()>0){
            pairs.forEach(httpRequest::queryParams);}}privatestaticJSONObjectupload()throwsIOException{File file =newFile("C:\\Users\\andanyang\\Downloads\\Sql.txt");Map<String,Object> formParams =newHashMap<>();
        formParams.put("key","test");
        formParams.put("file", file);
        formParams.put("token","WXyUseb-D4sCum-EvTIDYL-mEehwDtrSBg-Zca7t:qgOcR2gUoKmxt-VnsNb657Oatzo=:eyJzY29wZSI6InpoYW56aGkiLCJkZWFkbGluZSI6MTY2NTMwNzUxNH0=");Response response =HttpUtil.upload("https://upload.qiniup.com/", formParams);returnJSONObject.parseObject(response.body().string());}privatestaticvoiddownload()throwsIOException{HttpUtil.down("https://gitee.com/admin4j/common-http","path/");}}

使用:

@RestController@RequestMapping("/test")publicclassTestController{@GetMapping("/queryById")publicStringqueryById(String id)throwsIOException{Map<String,Object> params =newHashMap<>();Map<String,Object> headers =newHashMap<>();
        params.put("id", id);
        headers.put("X-Access-Token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODcyMjgxNjUsInVzZXJuYW1lIjoibGlqaW5nIn0.QNlQVrqiQymaeX38VXJCYhBXf3W6nQVDTmvlF0QKK-k");String url ="http://localhost:20001/test/queryById";OkHttpUtil.get(url, params, headers);return"get";}@PostMapping("/add")publicStringadd()throwsIOException{Map<String,String> headers =newHashMap<>();
        headers.put("X-Access-Token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODcxNjM4MDcsInVzZXJuYW1lIjoibGlqaW5nIn0.BUeqjiBQrH0DCfciRQsWo1P1XOoIxXNuNaM27vjAmys");UserVo userVo =newUserVo();
        userVo.setId(1L);
        userVo.setName("zzc");String url ="http://localhost:20001/test/add";OkHttpUtil.post(url,JSON.toJSONString(userVo));return"post";}@PostMapping("/add2")publicStringadd2()throwsIOException{Map<String,Object> headers =newHashMap<>();
        headers.put("X-Access-Token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODcyMzUzOTksInVzZXJuYW1lIjoibGlqaW5nIn0.zTOOhKS13RqWPj01fhWZoWR1Qz055uv2XG_eSIdt1NE");UserVo userVo =newUserVo();
        userVo.setId(1L);
        userVo.setName("zzc");String url ="http://localhost:20001/test/add";OkHttpUtil.post(url,JSON.toJSONString(userVo), headers);return"post";}}

4.Jodd HTTP

<dependency><groupId>org.jodd</groupId><artifactId>jodd-http</artifactId><version>6.3.0</version></dependency>
publicclassJoddUtil{publicstaticJSONObjectget(String url,Map<String,Object> queryParams)throwsIOException{returnget(url, queryParams,null);}publicstaticJSONObjectget(String url,Map<String,Object> queryParams,Map<String,String> headers)throwsIOException{HttpRequest request =HttpRequest.get(url);setParams(request, queryParams);setHeaders(request, headers);returngetResponse(request);}publicstaticJSONObjectpost(String url,String json)throwsIOException{returnpost(url, json,null);}publicstaticJSONObjectpost(String url,String json,Map<String,String> headers)throwsIOException{HttpRequest request =HttpRequest.post(url);
        request.contentType("application/json");
        request.charset("utf-8");setHeaders(request, headers);
        request.body(json);returngetResponse(request);}publicstaticJSONObjectpostForm(String url,Map<String,Object> formParams)throwsIOException{returnpostForm(url, formParams,null);}publicstaticJSONObjectpostForm(String url,Map<String,Object> formParams,Map<String,String> headers)throwsIOException{HttpRequest request =HttpRequest.post(url);
        request.form(formParams);setHeaders(request, headers);returngetResponse(request);}privatestaticJSONObjectgetResponse(HttpRequest request){HttpResponse response = request.send();
        response.charset("UTF-8");returnJSONObject.parseObject(response.bodyText());}privatestaticvoidsetParams(HttpRequest request,Map<String,Object> queryParams){if(Objects.nonNull(queryParams)&& queryParams.size()>0){
            queryParams.forEach(request::query);}}privatestaticvoidsetHeaders(HttpRequest request,Map<String,String> headers){if(Objects.nonNull(headers)&& headers.size()>0){
            request.header(headers);}}}

使用:

@RestController@RequestMapping("/test")publicclassTestController{@GetMapping("/queryById")publicStringqueryById(String id)throwsIOException{Map<String,Object> params =newHashMap<>();Map<String,String> headers =newHashMap<>();
        params.put("id", id);
        headers.put("X-Access-Token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODcyNDQ2MjQsInVzZXJuYW1lIjoibGlqaW5nIn0.adNXSJnLDXBIRzcykM2Pkh1CF3R0So6D8FZ6w18PuXs");String url ="http://localhost:20001/test/queryById";JSONObject jsonObject =JoddUtil.get(url, params, headers);return"get";}@PostMapping("/add")publicStringadd()throwsIOException{Map<String,String> headers =newHashMap<>();
        headers.put("X-Access-Token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODcyNDQ2MjQsInVzZXJuYW1lIjoibGlqaW5nIn0.adNXSJnLDXBIRzcykM2Pkh1CF3R0So6D8FZ6w18PuXs");UserVo userVo =newUserVo();
        userVo.setId(1L);
        userVo.setName("zzc");String url ="http://localhost:20001/test/add";JSONObject jsonObject =JoddUtil.post(url,JSON.toJSONString(userVo), headers);return"post";}@PostMapping("/add2")publicStringadd2()throwsIOException{Map<String,String> headers =newHashMap<>();Map<String,Object> formParams =newHashMap<>();
        headers.put("X-Access-Token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODcyNDQ2MjQsInVzZXJuYW1lIjoibGlqaW5nIn0.adNXSJnLDXBIRzcykM2Pkh1CF3R0So6D8FZ6w18PuXs");
        formParams.put("id",1631112733290594305L);String url ="http://localhost:20001/test/add2";JSONObject jsonObject =JoddUtil.postForm(url, formParams, headers);return"post";}}

5.Hutool HTTP

Http客户端工具类-HttpUtil

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.6</version></dependency>
publicclassHutoolHttpUtil{publicstaticJSONObjectget(String url,Map<String,Object> queryParams)throwsIOException{returnget(url, queryParams,newHashMap<>(1));}publicstaticJSONObjectget(String url,Map<String,Object> queryParams,Map<String,String> headers)throwsIOException{String body =HttpRequest.get(url).form(queryParams).addHeaders(headers).execute().body();returnJSONObject.parseObject(body);}publicstaticJSONObjectpost(String url,String json,Map<String,String> headers){String body =HttpRequest.post(url).body(json).addHeaders(headers).execute().body();returnJSONObject.parseObject(body);}}

6.RestTemplate

@ConfigurationpublicclassRestTemplateConfig{@BeanpublicRestTemplaterestTemplate(){returnnewRestTemplate();}}
@ComponentpublicclassRestTemplateUtil{@AutowiredprivateRestTemplate restTemplate;publicJSONObjectget(String url,Map<String,Object> queryParams)throwsIOException{returnget(url, queryParams,newHashMap<>(1));}publicJSONObjectget(String url,Map<String,Object> queryParams,Map<String,String> headerParams)throwsIOException{String tempUrl =setParamsByAppendUrl(queryParams, url);HttpHeaders headers =newHttpHeaders();
        headerParams.forEach(headers::add);HttpEntity<MultiValueMap<String,Object>> httpEntity =newHttpEntity<>(null, headers);ResponseEntity<String> response = restTemplate.exchange(tempUrl,HttpMethod.GET, httpEntity,String.class);returnJSONObject.parseObject(response.getBody());}publicJSONObjectget2(String url,Map<String,Object> queryParams,Map<String,String> headerParams)throwsIOException{String tempUrl =setParamsByPath(queryParams, url);HttpHeaders headers =newHttpHeaders();
        headerParams.forEach(headers::add);HttpEntity<MultiValueMap<String,Object>> httpEntity =newHttpEntity<>(null, headers);ResponseEntity<String> response = restTemplate.exchange(tempUrl,HttpMethod.GET, httpEntity,String.class, queryParams);returnJSONObject.parseObject(response.getBody());}publicJSONObjectpost(String url,String json,Map<String,String> headerParams){HttpHeaders headers =newHttpHeaders();
        headerParams.forEach(headers::add);
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.add("Accept",MediaType.APPLICATION_JSON.toString());HttpEntity<String> httpEntity =newHttpEntity<>(json, headers);ResponseEntity<String> response = restTemplate.exchange(url,HttpMethod.POST, httpEntity,String.class);returnJSONObject.parseObject(response.getBody());}privateStringsetParamsByPath(Map<String,Object> queryParams,String url){// url?id={id}&name={name}if(queryParams ==null|| queryParams.isEmpty()){return url;}StringBuilder sb =newStringBuilder();try{for(Map.Entry<String,Object> entry : queryParams.entrySet()){
                sb.append("&").append(entry.getKey()).append("=").append("{").append(entry.getKey()).append("}");}if(!url.contains("?")){
                sb.deleteCharAt(0).insert(0,"?");}}catch(Exception e){
            e.printStackTrace();}return url + sb;}privateStringsetParamsByAppendUrl(Map<String,Object> queryParams,String url){// url?id=1&name=zzcif(queryParams ==null|| queryParams.isEmpty()){return url;}StringBuilder sb =newStringBuilder();try{for(Map.Entry<String,Object> entry : queryParams.entrySet()){
                sb.append("&").append(entry.getKey()).append("=");
                sb.append(entry.getValue());}if(!url.contains("?")){
                sb.deleteCharAt(0).insert(0,"?");}}catch(Exception e){
            e.printStackTrace();}return url + sb;}}

使用:

@RestController@RequestMapping("/test")publicclassTestController{@AutowiredprivateRestTemplateUtil restTemplateUtil;@GetMapping("/queryById")publicStringqueryById(String id)throwsIOException{Map<String,Object> params =newHashMap<>();Map<String,String> headers =newHashMap<>();
        params.put("id", id);
        headers.put("X-Access-Token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODczMTMxNTMsInVzZXJuYW1lIjoibGlqaW5nIn0.DStv6J23FcHRAWO5kvorfVHbao7Sih4nHPU-k4ynmeM");String url ="http://localhost:20001/test/queryById";JSONObject jsonObject = restTemplateUtil.get2(url, params, headers);return"get";}@PostMapping("/add")publicStringadd()throwsIOException{Map<String,String> headers =newHashMap<>();
        headers.put("X-Access-Token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODczMTMxNTMsInVzZXJuYW1lIjoibGlqaW5nIn0.DStv6J23FcHRAWO5kvorfVHbao7Sih4nHPU-k4ynmeM");UserVo userVo =newUserVo();
        userVo.setId(1L);
        userVo.setName("zzc");String url ="http://localhost:20001/test/add";JSONObject jsonObject = restTemplateUtil.post(url,JSON.toJSONString(userVo), headers);return"post";}}

7.forest

forest 官网

<dependency><groupId>com.dtflys.forest</groupId><artifactId>forest-spring-boot-starter</artifactId><version>1.5.32</version></dependency>

配置:

forest:max-connections:1000# 连接池最大连接数connect-timeout:3000# 连接超时时间,单位为毫秒read-timeout:3000# 数据读取超时时间,单位为毫秒

扫描接口:

1.5.1以后版本可以跳过此步,不需要 @ForestScan 注解来指定扫描的包范围

只要在

Springboot

的配置类或者启动类上加上

@ForestScan

注解,并在

basePackages

属性里填上远程接口的所在的包名

publicinterfaceTestClient{@Get("http://localhost:20001/test/queryById")StringqueryById(@HeaderMap<String,Object> headerMap,@QueryMap<String,Object> params);@Post("http://localhost:20001/test/add")Stringadd(@HeaderMap<String,Object> headerMap,@JSONBodyUserVo userVo);}

测试:

@RestController@RequestMapping("/forest")publicclassForestController{@AutowiredprivateTestClient testClient;@GetMapping("/queryById")publicStringqueryById(Long id){Map<String,Object> headerMap =newHashMap<>();Map<String,Object> params =newHashMap<>();
        params.put("id", id);
        headerMap.put("X-Access-Token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODg4MDg3NzQsInVzZXJuYW1lIjoiYWRtaW4ifQ.xo5h1KwdCvMkRpUf4SkioYSpyP7j3thA86vrdz7AcGY");return testClient.queryById(headerMap, params);}@PostMapping("/add")publicStringadd(@RequestBodyUserVo userVo){Map<String,Object> headerMap =newHashMap<>();
        headerMap.put("X-Access-Token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2ODg4MDg3NzQsInVzZXJuYW1lIjoiYWRtaW4ifQ.xo5h1KwdCvMkRpUf4SkioYSpyP7j3thA86vrdz7AcGY");return testClient.add(headerMap, userVo);}}
标签: http spring boot java

本文转载自: https://blog.csdn.net/sco5282/article/details/131261271
版权归原作者 sco5282 所有, 如有侵权,请联系我们删除。

“【SpringBoot】7 种实现 HTTP 调用的方式”的评论:

还没有评论