| package com.dy.rtuMw3rd.http4Xjnk; | 
|   | 
| import com.dy.common.util.HttpCallback; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.http.*; | 
| import org.springframework.http.converter.StringHttpMessageConverter; | 
| import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; | 
| import org.springframework.stereotype.Component; | 
| import org.springframework.web.client.RestTemplate; | 
| import org.springframework.web.util.UriComponentsBuilder; | 
|   | 
| import java.nio.charset.StandardCharsets; | 
| import java.util.Iterator; | 
| import java.util.Map; | 
| import java.util.concurrent.CompletableFuture; | 
|   | 
| /** | 
|  * @Author: liurunyu | 
|  * @Date: 2025/3/15 9:56 | 
|  * @Description | 
|  */ | 
| @Component() | 
| public class HttpRq { | 
|   | 
|     private RestTemplate restTemplate ; | 
|   | 
|     @Autowired | 
|     public void setRestTemplate(RestTemplate restTemplate){ | 
|         this.restTemplate = restTemplate; | 
|     } | 
|   | 
|     /** | 
|      * get请求,返回json内容 | 
|      * 同步 | 
|      * @param httpBaseUrl | 
|      * @param params | 
|      * @param cb | 
|      * @throws Exception | 
|      */ | 
|     public void get4JsonBySync(String httpBaseUrl, Map<String, String> params, HttpCallback cb) throws Exception { | 
|         String url = UriComponentsBuilder.fromUriString(httpBaseUrl) | 
|                 .build() | 
|                 .toUriString(); | 
|   | 
|         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url) ; | 
|         if(params != null && params.size() > 0){ | 
|             Iterator<String> it = params.keySet().iterator() ; | 
|             String key ; | 
|             while (it.hasNext()){ | 
|                 key = it.next() ; | 
|                 builder.queryParam(key, params.get(key)) ; | 
|             } | 
|         } | 
|         httpGetRequestSync(builder, cb); | 
|     } | 
|     /** | 
|      * get请求,返回json内容 | 
|      * 异步 | 
|      * @param httpBaseUrl | 
|      * @param params | 
|      * @param cb | 
|      * @throws Exception | 
|      */ | 
|     public void get4JsonByAsync(String httpBaseUrl, Map<String, String> params, HttpCallback cb) throws Exception { | 
|         String url = UriComponentsBuilder.fromUriString(httpBaseUrl) | 
|                 .build() | 
|                 .toUriString(); | 
|   | 
|         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url) ; | 
|         if(params != null && params.size() > 0){ | 
|             Iterator<String> it = params.keySet().iterator() ; | 
|             String key ; | 
|             while (it.hasNext()){ | 
|                 key = it.next() ; | 
|                 builder.queryParam(key, params.get(key)) ; | 
|             } | 
|         } | 
|         httpGetRequestAsync(builder, cb); | 
|     } | 
|   | 
|     /** | 
|      * get请求,返回json内容 | 
|      * 同步 | 
|      * @param httpBaseUrl | 
|      * @param params | 
|      * @param cb | 
|      * @throws Exception | 
|      */ | 
|     public void post4JsonBySync(String httpBaseUrl, Map<String, String> params, HttpCallback cb) throws Exception { | 
|         String url = UriComponentsBuilder.fromUriString(httpBaseUrl) | 
|                 .build() | 
|                 .toUriString(); | 
|   | 
|         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url) ; | 
|         httpPostRequestSync(builder, params, cb); | 
|     } | 
|     /** | 
|      * get请求,返回json内容 | 
|      * 异步 | 
|      * @param httpBaseUrl | 
|      * @param params | 
|      * @param cb | 
|      * @throws Exception | 
|      */ | 
|     public void post4JsonByAsync(String httpBaseUrl, Map<String, String> params, HttpCallback cb) throws Exception { | 
|         String url = UriComponentsBuilder.fromUriString(httpBaseUrl) | 
|                 .build() | 
|                 .toUriString(); | 
|   | 
|         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url) ; | 
|         httpPostRequestAsync(builder, params, cb); | 
|     } | 
|   | 
|     /** | 
|      * 发起请求 | 
|      * @param builder | 
|      * @param cb | 
|      * @return | 
|      */ | 
|     private void httpGetRequestSync(UriComponentsBuilder builder, HttpCallback cb) { | 
|         HttpHeaders headers = new HttpHeaders() ; | 
|         headers.setContentType(MediaType.APPLICATION_JSON) ; | 
|         restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8)); | 
|         // 通过Get方式调用接口 | 
|         ResponseEntity<String> response = restTemplate.exchange(builder.toUriString(), | 
|                 HttpMethod.GET, | 
|                 new HttpEntity<>(headers), | 
|                 String.class); | 
|   | 
|         String contentType = response.getHeaders().getContentType().toString() ; | 
|         cb.call(response.getStatusCode().value() + "", contentType, response.getBody()); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 发起请求 | 
|      * @param builder | 
|      * @param cb | 
|      * @return | 
|      */ | 
|     private void httpGetRequestAsync(UriComponentsBuilder builder, HttpCallback cb) throws Exception { | 
|         HttpHeaders headers = new HttpHeaders() ; | 
|         headers.setContentType(MediaType.APPLICATION_JSON) ; | 
|         restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8)); | 
|         // 发起异步 GET 请求 | 
|         CompletableFuture<ResponseEntity<String>> future = CompletableFuture.supplyAsync(() -> | 
|                 // 通过Get方式调用接口 | 
|                 restTemplate.exchange(builder.toUriString(), | 
|                         HttpMethod.GET, | 
|                         new HttpEntity<>(headers), | 
|                         String.class) | 
|         ); | 
|         future.thenAccept(response -> { | 
|             String contentType = response.getHeaders().getContentType().toString() ; | 
|             cb.call(response.getStatusCode().value() + "", contentType, response.getBody()); | 
|         }) ; | 
|         /* | 
|         AtomicReference<Throwable> exeEx = new AtomicReference() ; | 
|         future.thenAccept(response -> { | 
|             String contentType = response.getHeaders().getContentType().toString() ; | 
|             cb.call(response.getStatusCode().value() + "", contentType, response.getBody()); | 
|         }).exceptionally(ex -> { | 
|             exeEx.set(ex.getCause()); | 
|             return null; | 
|         }); | 
|         */ | 
|     } | 
|   | 
|     /** | 
|      * 发起请求 | 
|      * @param builder | 
|      * @param body | 
|      * @param cb | 
|      * @return | 
|      */ | 
|     private void httpPostRequestSync(UriComponentsBuilder builder, Map<String, String> body, HttpCallback cb) { | 
|         HttpHeaders headers = new HttpHeaders() ; | 
|         headers.setContentType(MediaType.APPLICATION_JSON) ; | 
|         restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8)); | 
|         restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); | 
|         HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(body, headers); | 
|         // 通过Get方式调用接口 | 
|         ResponseEntity<String> response = restTemplate.exchange(builder.toUriString(), | 
|                 HttpMethod.POST, | 
|                 requestEntity, | 
|                 String.class); | 
|   | 
|         String contentType = response.getHeaders().getContentType().toString() ; | 
|         cb.call(response.getStatusCode().value() + "", contentType, response.getBody()); | 
|     } | 
|   | 
|     /** | 
|      * 发起请求 | 
|      * @param builder | 
|      * @param body | 
|      * @param cb | 
|      * @return | 
|      */ | 
|     private void httpPostRequestAsync(UriComponentsBuilder builder, Map<String, String> body, HttpCallback cb) throws Exception { | 
|         HttpHeaders headers = new HttpHeaders() ; | 
|         headers.setContentType(MediaType.APPLICATION_JSON) ; | 
|         restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8)); | 
|         restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); | 
|         HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(body, headers); | 
|         // 发起异步 GET 请求 | 
|         CompletableFuture<ResponseEntity<String>> future = CompletableFuture.supplyAsync(() -> | 
|                 // 通过Get方式调用接口 | 
|                 restTemplate.exchange(builder.toUriString(), | 
|                         HttpMethod.POST, | 
|                         requestEntity, | 
|                         String.class) | 
|         ); | 
|         future.thenAccept(response -> { | 
|             String contentType = response.getHeaders().getContentType().toString() ; | 
|             cb.call(response.getStatusCode().value() + "", contentType, response.getBody()); | 
|         }) ; | 
|         /* | 
|         AtomicReference<Throwable> exeEx = new AtomicReference() ; | 
|         future.thenAccept(response -> { | 
|             String contentType = response.getHeaders().getContentType().toString() ; | 
|             cb.call(response.getStatusCode().value() + "", contentType, response.getBody()); | 
|         }).exceptionally(ex -> { | 
|             exeEx.set(ex.getCause()); | 
|             return null; | 
|         }); | 
|         */ | 
|     } | 
| } |