当前位置: 首页 >服务端 > HttpClient和RestTemplate

HttpClient和RestTemplate

java请求网络资源通常用HttpClient等,Spring封装了库,提供更为简洁的资源请求方式RestTemplate
RestTemplate默认使用的是SimpleClientHttpRequestFactory工厂
默认它是以java.net下的HttpURLConnection方式发起的请求
所以RestTemplate是支持多种方式发起请求的
查看该工程的实现类可知,支持包括HttpClient, OkHttp等方式

HttpClient:代码复杂,还得操心资源回收等,代码很复杂,冗余代码多,不建议直接使用,一般是封装为 HttpUtils工具类使用
RestTemplate: 是 Spring 提供的用于访问Rest服务的客户端, RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率

一、HttpClient

1、发起get无参请求

@Test //get 无参public void doGet() {	String uri = "https://openapi.chanjet.com/auth/refreshToken?grantType=refresh_token&appKey=K2vIOn4m&refreshToken=1";// 1.创建Http客户端CloseableHttpClient httpClient = HttpClientBuilder.create().build();// 2.创建Get请求HttpGet request = new HttpGet(uri);// 3.响应模型CloseableHttpResponse response = null;try {// 3.执行Get请求response = httpClient.execute(request);// 4.从响应模型中获取响应实体HttpEntity responseEntity = response.getEntity();System.out.println("响应状态为:" + response.getStatusLine());if (responseEntity != null) {System.out.println("响应内容长度为:" + responseEntity.getContentLength());System.out.println("响应内容为:" + EntityUtils.toString(responseEntity, StandardCharsets.UTF_8));}} catch (IOException e) {e.printStackTrace();} finally {try {if (httpClient != null) {httpClient.close();}if (response != null) {response.close();}} catch (IOException e) {e.printStackTrace();}}}

2、发起post无参请求

@Test //post 对象public void postObject() {	// 如果有普通参数,uri 改成 URIBuilderString uri = "http://localhost:8080/people/addPeople";// 创建Http客户端CloseableHttpClient httpClient = HttpClientBuilder.create().build();		// 创建Post请求HttpPost request = new HttpPost(uri);request.setHeader("Content-Type", "application/json;charset=utf8");		// 添加json对象People people = new People();people.setName("张飞");people.setCreateTime(LocalDateTime.now());String jsonString = JSON.toJSONString(people);StringEntity entity = new StringEntity(jsonString, "UTF-8");httpPost.setEntity(entity);// 响应模型CloseableHttpResponse response = null;try {// 执行Post请求response = httpClient.execute(request);// 从响应模型中获取响应实体HttpEntity responseEntity = response.getEntity();System.out.println("响应状态为:" + response.getStatusLine());if (responseEntity != null) {System.out.println("响应内容长度为:" + responseEntity.getContentLength());System.out.println("响应内容为:" + EntityUtils.toString(responseEntity, StandardCharsets.UTF_8));}} catch (IOException e) {e.printStackTrace();} finally {try {if (httpClient != null) {httpClient.close();}if (response != null) {response.close();}} catch (IOException e) {e.printStackTrace();}}}

二、RestTemplate

1、发起get请求请求

发送一个HTTP GET请求,返回的请求体将映射为一个对象
getForObject()

发送一个HTTP GET请求,返回的ResponseEntity包含了响应体所映射成的对象
getForEntity()

RestTemplate restTemplate = new RestTemplate();ResponseEntity<String> entity = restTemplate.getForEntity(uri, String.class);// TODO 处理响应

2、发起Post请求方式

postForEntity()
POST 数据到一个URL,返回包含一个对象的ResponseEntity,这个对象是从响应体中映射得到的。

postForObject()
POST 数据到一个URL,返回根据响应体匹配形成的对象。

postForLocation()
POST 数据到一个URL,返回新创建资源的URL

RestTemplate restTemplate = new RestTemplate();// headersHttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON_UTF8);HttpEntity<Object> objectHttpEntity = new HttpEntity<>(headers);// TODO 处理响应ResponseEntity<String> entity = restTemplate.postForEntity(uri, request, String.class);

作者:廉小雨
来源链接:https://blog.csdn.net/weixin_40964170/article/details/118990860

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/server/112060.html

标签:HttpClient
分享给朋友:

“HttpClient和RestTemplate” 的相关文章

[C#] winform 子窗体向父窗体传值 2022年05月17日 20:26:20
常用日志框架介绍 2022年05月19日 20:04:06
视图的概念以及使用视图的好处 2022年05月21日 11:37:16
Dart微基准测试第一部分 2022年05月23日 20:48:42
备战5月软考 2022年05月23日 22:39:11
飞算soflu软件机器人 2022年05月25日 22:23:09
Nacos Cluster Building 2022年05月26日 21:34:55
2.你中断线程的方式用对了么? 2022年05月26日 22:33:19