天天看點

java rest httpclient_java http請求建議使用webClient,少用RestTemplate,不用HttpClient

簡介:

webClient:是Spring-webFlux包下的,非阻塞響應,最低java8支援函數式程式設計,性能好

RestTemplate:是Spring-webmvc包下的,滿足RestFul原則,代碼簡單,預設依賴jdk的HTTP連接配接工具。

HttpClient:是apache httpClient包下的,代碼複雜,需要資源回收。

一、webClient get代碼如下:(非常簡單)

//create()建立一個WebClient的執行個體

//get()等選擇調用方式為get

//uri()指定需要請求的路徑

//retrieve()用來發起請求并獲得響應

//bodyToMono(String.class)用來指定請求結果需要處理為String,并包裝為Reactor的Mono對象。

Mono response = WebClient.create().get().uri("http:localhost:8080/rest/testGetHeader").retrieve().bodyToMono(String.class);

return response.block();

二、RestTemplate get代碼如下:(簡單)

1、先在啟動類注冊:

@Bean

public RestTemplate restTemplate(){

return new RestTemplate();

}

2、注入 RestTemplate 對象後使用getForObject即可(簡單get請求),還有postForObject(),put(),delete()等方法。

restTemplate.getForObject(uri, Object.class);

三、HttpClient get代碼如下:(複雜,不推薦使用)

try{

CloseableHttpClient client = HttpClients.createDefault();

HttpGet httpGet = new HttpGet(url);

//設定頭資訊

httpGet.setHeader(*, *);

HttpResponseresponse response = client.execute(httpGet);

if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){

return (String)new ObjectMapper().readValue(response.getEntity().getContent(), String.class);

}else{

throw new Exception("請求失敗,傳回狀态:"+response.getStatusLine().getStatusCode());

}

}catch(Exception e){

log.error("發送http錯誤 " + e);

throw e;

}finally{

try {

client.close();

} catch (IOException e) {

log.error("發送http錯誤 " + e);

throw e;

}

}

————————————————

版權聲明:本文為CSDN部落客「現實、太殘忍」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/sumengnan/java/article/details/104569021