java http请求建议使用webClient,少用RestTemplate,不用HttpClient

牧云@^-^@ 提交于 2020-08-09 10:50:22

简介:
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<String> 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!