作为一个Java开发选手,平时调用外部服务都是通过PRC接口,而这次业务下游只提供Http接口,就有点捉急...

RestTemplate的基本使用

RestTemplate是spring实现的,基于restful风格的http请求模板。使用RestTemplate可以简化请求操作的复杂性,同时规范了代码风格。

Get请求

// 将返回结果转换成POJO对象
public <T> T getForObject(String url, Class<T> responseType)// 返回Http原生信息(状态码、请求头、body)
public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType)
复制代码

实践:获取掘金今日格言

@Data
public class Result<T> implements Serializable {private int err_no;private String err_msg;private T data;
}private String urlFormat = "https://api.juejin.cn/growth_api/v1/get_coder_calendar?aid=%s&uuid=7037140143551399436";private RestTemplate restTemplate = new RestTemplate();@Test
public void testGet() {String url = String.format(urlFormat, "xxx");Result result = restTemplate.getForObject(url, Result.class);System.out.println(result);
}
复制代码

掘金今日签到格言:

Result(err_no=0, err_msg=success, data={aphorism=文档书写能力对工程师来说,与代码能力一样重要, should_or_not=宜追查到底})
复制代码

Post请求

// 将返回结果转换成POJO对象
public <T> T postForObject(String url, Object request, Class<T> responseType)// 返回Http原生信息(状态码、请求头、body)
public <T> ResponseEntity<T> postForEntity(String url, Object request, Class<T> responseType)
复制代码

实践:掘金自动抽奖

private String urlFormat = "https://api.juejin.cn/growth_api/v1/lottery/draw?aid=%s&uuid=6994739894300935684&_signature=_02B4Z6wo00901IFbWBAAAIDCsQ1vhfdqjSiBXlyAAEICZNX6.YFOgtHG7h9uKHxa1gwR5xaQh55ytA4gMUM6N9JboQDq5siTnpplhowAUX5HCv6Raat44rC31FskryqQD2bKbOyfkMoyJXev06";
private String cookie = "xxx";private RestTemplate restTemplate = new RestTemplate();public void testPost() {String url = String.format(urlFormat, "2608");// 请求头HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);headers.set(HttpHeaders.COOKIE, cookie);// 请求体JSONObject body = new JSONObject();HttpEntity<String> request = new HttpEntity(body.toString(), headers);Result result = restTemplate.postForObject(urlFormat, request, Result.class);System.out.println(((Map) result.getData()).get("lottery_name"));
}
复制代码

RestTemplate的扩展知识

  1. getForObject()方法无法为请求头hearder传值,可以使用底层通用方法exchange()或excute();
  2. RestTemplate入门博客: #Spring之RestTemplate使用小结 #Springboot -- 用更优雅的方式发HTTP请求(RestTemplate详解)
  3. RestTemplate原理博客: #RestTemplate添加超时处理ClientHttpRequestFactory的选择 #restTemplate源码解析(目录) #  HttpClient连接池的一些思考

RestTemplate开发模板

@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate(clientHttpRequestFactory());}@Beanpublic HttpClientConnectionManager poolingConnectionManager() {PoolingHttpClientConnectionManager poolingConnectionManager = new PoolingHttpClientConnectionManager();// 整个线程池中最大连接数poolingConnectionManager.setMaxTotal(200);// 路由到某台主机最大并发数poolingConnectionManager.setDefaultMaxPerRoute(100);return poolingConnectionManager;}@Beanpublic ClientHttpRequestFactory clientHttpRequestFactory() {HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();httpClientBuilder.setConnectionManager(poolingConnectionManager());clientHttpRequestFactory.setHttpClient(httpClientBuilder.build());// 客户端和服务器建立连接的超时时间clientHttpRequestFactory.setConnectTimeout(1000);// 客户端从服务器读取数据的超时时间clientHttpRequestFactory.setReadTimeout(3000);return clientHttpRequestFactory;}
}

Spring中使用RestTemplate发送Http请求相关推荐

  1. RestTemplate 发送 Https 请求调用

    RestTemplate 发送 Https 请求调用 个人博客:https://jacob.org.cn import org.apache.http.conn.ssl.NoopHostnameVer ...

  2. restTemplate发送put请求

    restTemplate发送put请求 1.没有返回体 2.有返回体 HttpHeaders headers = new HttpHeaders(); headers.setContentType(o ...

  3. 【Spring】Feign客户端发送HTTPS请求绕过认证

    1.概述 转载:https://www.jianshu.com/p/ea627708ab52 一个Spring Boot项目,为了使用Harbor仓库,起初通过Spring RestTemplate完 ...

  4. springboot 使用restTemplate 发送https请求 忽略ssl证书

    最近在写接口的时候给对方回推数据,发送https请求的时候遇到这么个报错:javax.net.ssl.SSLHandshakeException: sun.security.validator.Val ...

  5. promise的应用和在VUE中使用axios发送AJAX请求服务器

    promise 用promise对函数封装: 原来的代码: <!DOCTYPE html> <html> <head><title>vue demo&l ...

  6. resttemplate发送post请求

    /*** 向目的URL发送post请求* @param url 目的url* @param params 发送的参数* @return ResultVO*/public static ResultVO ...

  7. restTemplate 发送post请求

    <!--jackson 依赖--><dependency><groupId>com.fasterxml.jackson.core</groupId>&l ...

  8. C#中通过HttpClient发送Post请求

    C#中HttpClient进行各种类型的传输 我们可以看到, 尽管PostAsync有四个重载函数, 但是接受的都是HttpContent, 而查看源码可以看到, HttpContent是一个抽象类 ...

  9. RestTemplate发送form-data请求上传rul资源文件及对象参数

    需求 上传文件服务中的文件到其他平台 接口描述:用于上传工程日志相关资料 请求url:/cq-szh-projectdocumentscomputesvc/api/service/addEnginee ...

最新文章

  1. 如何查找两个列表之间的差异?
  2. 收藏!AI 最全干货超级大列表,100+ 张速查表全了!
  3. python批量识别图中文字自动命名_python实现批量命名照片
  4. python 线性回归回归 缺失值 忽略_python – 使用scikit-learn(sklearn),如何处理线性回归的缺失数据?...
  5. CTF爬虫:掌握这些特征,一秒识别密文加密方式
  6. 软件设计师 一年考几次_一年写106篇文章如何帮助我成长为设计师
  7. 随想录(关于pthread的使用方法)
  8. 【Day34】Pyhotn之路——网络编程
  9. idea自动导包_IDEA已经世界第一了,听说你还不会?
  10. php公众获取用户信息,PHP--通过公众号获取用户微信信息
  11. wps linux数据库,金山 WPS for Linux
  12. 公众号的服务器位置和ip地址,怎么查看公众号服务器ip地址吗
  13. 《贝叶斯统计》最大后验密度可信集(HPD)Python实现
  14. 知识树软件的IPO图
  15. linux io page fault,Linux的page fault
  16. UICollectioView的组头和组尾的高度不同设置
  17. centos7如何安装chrome浏览器?
  18. 红米5双清_小米红米5 plus(安卓8.0)刷官方中文Recovery教程,recovery工具分享,recovery下载...
  19. ShaderJoy —— 仿抖音的十字星光效果 【GLSL】
  20. 图像识别 - C++读取bmp位图入门

热门文章

  1. mysql日志管理 、备份与恢复
  2. 用计算机改手机电量,用电脑给手机充电却不耐用:都是它在捣鬼
  3. jq 选择器 选中某元素和反选
  4. SQL判断不等于的5种方法和判断非空的11种方法
  5. Mac 2020 m1芯片初体验
  6. 学习python中的pandas教程
  7. 【深度学习与图神经网络核心技术实践应用高级研修班-Day1】深度学习的发展历史(完整版)
  8. Jetson Xavier NX部署Yolov5(GPU版)
  9. 无所不能的人工智能也会被一张图片骗过?
  10. 如何用虚拟现实培训领导力?