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; 
 | 
        }); 
 | 
        */ 
 | 
    } 
 | 
} 
 |