国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用Spring Boot和Apache HttpClient構(gòu)建REST客戶端

這篇具有很好參考價值的文章主要介紹了使用Spring Boot和Apache HttpClient構(gòu)建REST客戶端。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

使用Spring Boot和Apache HttpClient構(gòu)建REST客戶端

介紹:
在本文中,我們將學習如何使用Spring Boot和Apache HttpClient創(chuàng)建一個REST客戶端。我們將探討如何與遠程服務器進行通信、處理JSON響應,并為Web應用程序配置跨源資源共享(CORS)。讓我們深入代碼吧!


服務層

ClientService 類負責發(fā)起HTTP請求并處理響應。它使用 @Service 注解表示它應該由Spring容器進行管理。

@Service
public class ClientService {
    @Autowired
    private CloseableHttpClient httpClient;
    @Autowired
    private ObjectMapper objectMapper;
    
    // 發(fā)起GET請求并將響應作為Map返回的方法
    public Map ResponseMap(String url) throws IOException {
        // 創(chuàng)建GET請求,并使用提供的URL
        HttpGet request = new HttpGet(url);

        // 發(fā)送請求并獲取響應
        HttpResponse response = httpClient.execute(request);
        HttpEntity entity = response.getEntity();

        // 處理響應體
        Map responseBody = null;
        if (entity != null) {
            String jsonString = EntityUtils.toString(entity);
            responseBody = objectMapper.readValue(jsonString, Map.class);
        }

        // 關閉連接
        EntityUtils.consume(entity);

        return responseBody;
    }

    // 發(fā)起GET請求并將響應作為String返回的方法
    public String ResponString(String url) throws IOException {
        // 創(chuàng)建GET請求,并使用提供的URL
        HttpGet request = new HttpGet(url);

        // 發(fā)送請求并獲取響應
        HttpResponse response = httpClient.execute(request);
        HttpEntity entity = response.getEntity();

        // 處理響應體
        String responseBody = "";
        if (entity != null) {
            responseBody = EntityUtils.toString(entity);
        }

        // 關閉連接
        EntityUtils.consume(entity);

        return responseBody;
    }
}

控制器層

MyClientController 類是控制器層,負責處理HTTP請求并返回響應。

@RestController
@RequestMapping("/api")
public class MyClientController {
    private final ObjectMapper objectMapper;
    private final CloseableHttpClient httpClient;
    private final ClientService clientService;

    @Autowired
    public MyClientController(CloseableHttpClient httpClient, ObjectMapper objectMapper, ClientService clientService) {
        this.httpClient = httpClient;
        this.objectMapper = objectMapper;
        this.clientService = clientService;
    }

    @GetMapping("/example")
    public ResponseEntity<String> ResponString() throws IOException {
        String s = clientService.ResponString("http://localhost:8081/api/test");
        return ResponseEntity.ok(s);
    }

    @GetMapping("/mapreq")
    public ResponseEntity<Map> ResponseMap() throws IOException {
        Map map1 = clientService.ResponseMap("http://localhost:8081/flux/testmap");
        System.out.println("map1 = " + map1);
        Object key1 = map1.get("key1");
        System.out.println("key1.toString() = " + key1.toString());
        return ResponseEntity.ok(map1);
    }

    @GetMapping("/test")
    public String testEndpoint() {
        return "test";
    }
}

配置類

HttpClientConfiguration 類是一個配置類,用于自動裝配到Bean中。

@Configuration
public class HttpClientConfiguration {

    @Bean
    public CloseableHttpClient httpClient() {
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

        // 設置請求頭
        httpClientBuilder.setDefaultHeaders(Arrays.asList(createDefaultHeaders()));

        // 設置基礎配置
        httpClientBuilder.setDefaultRequestConfig(createRequestConfig());

        // 創(chuàng)建HttpClient對象
        CloseableHttpClient httpClient = httpClientBuilder.build();
        return httpClient;
    }

    private RequestConfig createRequestConfig() {
        // 設置連接超時時間
        int connectionTimeout = 5000;
        // 設置讀取超時時間
        int socketTimeout = 5000;

        return RequestConfig.custom()
                .setConnectTimeout(connectionTimeout)
                .setSocketTimeout(socketTimeout)
                .build();
    }

    private Header[] createDefaultHeaders() {
        Header[] headers = {
                new BasicHeader(HttpHeaders.CONTENT_TYPE, "application/json"),
                // 可以添加其他請求頭
        };
        return headers;
    }
}

跨域配置

MyCorsConfiguration 類是一個配置類,用于配置WebFlux的跨域。

@Configuration
public class MyCorsConfiguration extends org.springframework.web.cors.CorsConfiguration {

    @Bean
    public CorsWebFilter corsWebFilter() {
        CorsConfiguration corsConfig = new CorsConfiguration();
        corsConfig.addAllowedOrigin("*");
        corsConfig.addAllowedMethod("*");
        corsConfig.addAllowedHeader("*");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", corsConfig);

        return new CorsWebFilter(source);
    }
}

在本示例中,我們創(chuàng)建了一個包含服務層、控制器層和配置類的Spring Boot應用程序。服務層的 ClientService 類負責通過Apache HttpClient發(fā)起HTTP請求,并處理響應??刂破鲗拥?MyClientController 類負責處理HTTP請求并返回響應。我們還創(chuàng)建了一個配置類 HttpClientConfiguration,用于配置Apache HttpClient,并將其作為Bean注入到應用程序中。另外,我們還創(chuàng)建了一個配置類 MyCorsConfiguration,用于配置WebFlux的跨域資源共享(CORS)。

Spring Boot和Apache HttpClient構(gòu)建REST客戶端的應用。

  1. 錯誤處理:在實際應用中,處理HTTP請求和響應中的錯誤非常重要。您可以在ClientService類中添加適當?shù)腻e誤處理機制,例如處理連接超時、讀取超時、狀態(tài)碼錯誤等。這樣可以提高應用程序的健壯性和容錯性。

  2. 請求參數(shù)和請求體:在實際場景中,您可能需要向服務器發(fā)送具有請求參數(shù)或請求體的HTTP請求。您可以使用HttpClient的不同方法(例如HttpPost)來發(fā)送包含請求參數(shù)或請求體的POST請求。在ClientService類中添加相應的方法來處理這些類型的請求。

  3. 身份驗證和授權(quán):如果您需要對HTTP請求進行身份驗證或授權(quán),您可以使用Apache HttpClient提供的功能來處理這些方面。例如,您可以設置請求頭中的身份驗證憑據(jù),或者使用OAuth等授權(quán)機制來訪問受限資源。

  4. 并發(fā)請求:在某些情況下,您可能需要同時發(fā)起多個HTTP請求,并在所有請求完成后進行處理。您可以使用Apache HttpClient的異步功能或結(jié)合Spring Boot的異步支持來實現(xiàn)并發(fā)請求。

  5. 單元測試:編寫單元測試對于確保REST客戶端的正確性和穩(wěn)定性非常重要。您可以使用Spring Boot提供的測試框架(如JUnit和MockMvc)來編寫單元測試,并模擬HTTP請求和響應。

  6. 日志記錄:在開發(fā)和調(diào)試過程中,記錄HTTP請求和響應的詳細信息非常有用。您可以使用適當?shù)娜罩居涗浛蚣埽ㄈ鏛ogback或Log4j)來記錄HTTP請求和響應的信息,以便進行故障排除和性能優(yōu)化。文章來源地址http://www.zghlxwxcb.cn/news/detail-793592.html

到了這里,關于使用Spring Boot和Apache HttpClient構(gòu)建REST客戶端的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Java使用Milo實現(xiàn)OPC UA客戶端,封裝spring boot starter

    Java使用Milo實現(xiàn)OPC UA客戶端,封裝spring boot starter

    最新版本更新日志查看:https://github.com/kangaroo1122/milo-spring-boot-starter/blob/main/UPDATE.md、https://gitee.com/vampire001/milo-spring-boot-starter/blob/master/UPDATE.md,此處不再更新 由eclipse開源,地址:https://github.com/eclipse/milo,可以基于此開發(fā)OPC UA客戶端或者服務端。 本文介紹基于milo 封裝的sp

    2024年02月09日
    瀏覽(27)
  • spring data elasticsearch使用7.x客戶端兼容es 8.x和使用ssl構(gòu)建RestHighLevelClient

    es在7.x中默認加入elastic security組件所以java client需要使用ssl連接es server. es 8.x 中廢棄了 RestHighLevelClient ,使用新版的 java api client ,但是spring data elasticsearch還未更新到該版本.所以需要兼容es 8.x 如下是RestHighLevelClient構(gòu)建方法: spring data elasticsearch客戶端依賴(基于spring boot2.7使用最新

    2024年02月13日
    瀏覽(27)
  • Spring Boot Starter Data Redis使用Lettuce客戶端報錯:NOAUTH Authentication required

    Spring Boot Starter Data Redis使用Lettuce客戶端報錯:NOAUTH Authentication required

    Spring Boot版本升級為:2.6.14 redis依賴: redis配置不變,還是帶password的: 項目啟動后,獲取redis連接時,報錯:NOAUTH Authentication required spring-boot-starer-data-redis支持使用Jedis和Lettuce作為redis客戶端,如果配置不指定則默認使用Lettuce。 不管是Lettuce還是還是Jedis,核心是構(gòu)建RedisCo

    2024年01月25日
    瀏覽(27)
  • 利用Spring Boot實現(xiàn)客戶端IP地理位置獲取

    利用Spring Boot實現(xiàn)客戶端IP地理位置獲取

    在當今互聯(lián)的世界中,了解客戶端的地理位置對于提供個性化服務和增強用戶體驗至關重要。無論是根據(jù)地區(qū)偏好定制內(nèi)容,還是確保符合本地法規(guī),訪問客戶端IP位置都是一項寶貴的資產(chǎn)。如抖音評論區(qū)、用戶頁都會展示用戶的IP屬地信息。 在本文中,我們將探討一個Spri

    2024年02月20日
    瀏覽(95)
  • Spring Boot 集成 WebSocket 實現(xiàn)服務端推送消息到客戶端

    Spring Boot 集成 WebSocket 實現(xiàn)服務端推送消息到客戶端

    ? ? ? 假設有這樣一個場景:服務端的資源經(jīng)常在更新,客戶端需要盡量及時地了解到這些更新發(fā)生后展示給用戶,如果是 HTTP 1.1,通常會開啟 ajax 請求詢問服務端是否有更新,通過定時器反復輪詢服務端響應的資源是否有更新。 ? ? ? ? ? ? ? ?? ? ? ? ?在長時間不更新

    2024年02月16日
    瀏覽(87)
  • 在Spring Boot微服務集成Kafka客戶端(spring-kafka)操作Kafka

    記錄 :457 場景 :在Spring Boot微服務集成Kafka客戶端spring-kafka-2.8.2操作Kafka。使用Spring封裝的KafkaTemplate操作Kafka生產(chǎn)者Producer。使用Spring封裝的@KafkaListener操作Kafka的消費者Consumer。 版本 :JDK 1.8,Spring?Boot 2.6.3,kafka_2.12-2.8.0,spring-kafka-2.8.2。 Kafka安裝 :https://blog.csdn.net/zhangbeizhen1

    2024年02月09日
    瀏覽(92)
  • 基于Spring Boot2.0 & HTTP/2 實現(xiàn)服務器、客戶端

    基于Spring Boot2.0 & HTTP/2 實現(xiàn)服務器、客戶端

    HTTP協(xié)議由于其無狀態(tài)的特性以及超高的普及率,是當下大部分網(wǎng)站選擇使用的應用層協(xié)議。然而,HTTP/1.x的底層傳輸方式的幾個特性,已經(jīng)對應用的整體性能產(chǎn)生了負面影響。特別是,HTTP/1.0在每次的TCP連接上只允許發(fā)送一次請求,在HTTP/1.1中增加了請求管線,但是這僅僅解決

    2023年04月09日
    瀏覽(83)
  • 【Spring Boot Admin】客戶端服務無法注冊到監(jiān)控平臺的相關問題及解決方案

    1、客戶端服務整合了Spring Security 通過URL注冊,需在客戶端服務中添加如下配置 通過注冊中心注冊,需在客戶端服務中添加如下配置 2、客戶端服務配置了server.port.context-path參數(shù),并且客戶端服務通過注冊中心注冊 需在客戶端服務中添加如下配置 3、Spring Boot Admin 監(jiān)控平臺使

    2024年02月16日
    瀏覽(94)
  • 在Spring Boot微服務集成Kafka客戶端(kafka-clients)操作Kafka

    記錄 :459 場景 :在Spring Boot微服務集成Kafka客戶端kafka-clients-3.0.0操作Kafka。使用kafka-clients的原生KafkaProducer操作Kafka生產(chǎn)者Producer。使用kafka-clients的原生KafkaConsumer操作Kafka的消費者Consumer。 版本 :JDK 1.8,Spring?Boot 2.6.3,kafka_2.12-2.8.0,kafka-clients-3.0.0。 Kafka安裝 :https://blog.csdn.ne

    2024年02月12日
    瀏覽(91)
  • Kafka增加安全驗證安全認證,SASL認證,并通過spring boot-Java客戶端連接配置

    公司Kafka一直沒做安全驗證,由于是誘捕程序故需要面向外網(wǎng)連接,需要增加Kafka連接驗證,保證Kafka不被非法連接,故開始研究Kafka安全驗證 使用Kafka版本為2.4.0版本,主要參考官方文檔 官網(wǎng)對2.4版本安全驗證介紹以及使用方式地址: https://kafka.apache.org/24/documentation.html#secu

    2024年02月01日
    瀏覽(93)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包