作为一个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. 2021年广东省高考英语听说成绩查询,广东2021年高考准考证今起自行打印 成绩及分数线6月24日左右公布...
  2. Composer入门
  3. 批处理处理远程计算机,使用批处理文件在远程计算机上调整PowerShell窗口的大小...
  4. 申论万用句型——背下来
  5. 工业级光电转换器产品介绍
  6. 每天坚持跑步到底会不会瘦呢?
  7. Java程序猿笔试面试之String1
  8. 工作难找,朋友却一口气拿了5份大厂offer,他是怎么做到的?
  9. 基于非特定人语音识别芯片的技术方案
  10. Python -day 7
  11. nodejs-基础:路由基础
  12. (详解)CentOS 7+环境下PHP使用Imagick+ghostscript将PDF文件转为图片
  13. [转载]RAR压缩包密码破解原理
  14. unity,射手游戏
  15. 【杂谈】想成为机器学习学霸?先学会做笔记吧(Evernote,BoostNote,Leanote等)
  16. 程序员养生之道:Google 是如何鼓励员工多吃蔬菜的?
  17. 如何快速恢复最近关闭的浏览器标签页面
  18. 蓝奏云(Lanzou网盘下载链接无法打开的解决方法
  19. tensorflow学习笔记(二十七):leaky relu
  20. MySQL 基础——MySQL 起步

热门文章

  1. java 九九乘法表 正序 倒序
  2. jQuery项目案例
  3. Uncaught ReferenceError vue is not defined
  4. notepad++ verilog 主题备份
  5. Java 一周学习总结(八)
  6. html 美化table,纯CSS美化HTML的Table
  7. 北大学生告微软幕后团队曝光 将打持久战 (转载)
  8. mysql的or和and的组合使用,以及空和非空值的判断
  9. 今天搞清楚了自然常熟e的现实意义
  10. PyQt自己定义窗口关闭按钮和方法