Spring中使用RestTemplate发送Http请求
作为一个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的扩展知识
- getForObject()方法无法为请求头hearder传值,可以使用底层通用方法exchange()或excute();
- RestTemplate入门博客: #Spring之RestTemplate使用小结 #Springboot -- 用更优雅的方式发HTTP请求(RestTemplate详解)
- 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请求相关推荐
- RestTemplate 发送 Https 请求调用
RestTemplate 发送 Https 请求调用 个人博客:https://jacob.org.cn import org.apache.http.conn.ssl.NoopHostnameVer ...
- restTemplate发送put请求
restTemplate发送put请求 1.没有返回体 2.有返回体 HttpHeaders headers = new HttpHeaders(); headers.setContentType(o ...
- 【Spring】Feign客户端发送HTTPS请求绕过认证
1.概述 转载:https://www.jianshu.com/p/ea627708ab52 一个Spring Boot项目,为了使用Harbor仓库,起初通过Spring RestTemplate完 ...
- springboot 使用restTemplate 发送https请求 忽略ssl证书
最近在写接口的时候给对方回推数据,发送https请求的时候遇到这么个报错:javax.net.ssl.SSLHandshakeException: sun.security.validator.Val ...
- promise的应用和在VUE中使用axios发送AJAX请求服务器
promise 用promise对函数封装: 原来的代码: <!DOCTYPE html> <html> <head><title>vue demo&l ...
- resttemplate发送post请求
/*** 向目的URL发送post请求* @param url 目的url* @param params 发送的参数* @return ResultVO*/public static ResultVO ...
- restTemplate 发送post请求
<!--jackson 依赖--><dependency><groupId>com.fasterxml.jackson.core</groupId>&l ...
- C#中通过HttpClient发送Post请求
C#中HttpClient进行各种类型的传输 我们可以看到, 尽管PostAsync有四个重载函数, 但是接受的都是HttpContent, 而查看源码可以看到, HttpContent是一个抽象类 ...
- RestTemplate发送form-data请求上传rul资源文件及对象参数
需求 上传文件服务中的文件到其他平台 接口描述:用于上传工程日志相关资料 请求url:/cq-szh-projectdocumentscomputesvc/api/service/addEnginee ...
最新文章
- 2021年广东省高考英语听说成绩查询,广东2021年高考准考证今起自行打印 成绩及分数线6月24日左右公布...
- Composer入门
- 批处理处理远程计算机,使用批处理文件在远程计算机上调整PowerShell窗口的大小...
- 申论万用句型——背下来
- 工业级光电转换器产品介绍
- 每天坚持跑步到底会不会瘦呢?
- Java程序猿笔试面试之String1
- 工作难找,朋友却一口气拿了5份大厂offer,他是怎么做到的?
- 基于非特定人语音识别芯片的技术方案
- Python -day 7
- nodejs-基础:路由基础
- (详解)CentOS 7+环境下PHP使用Imagick+ghostscript将PDF文件转为图片
- [转载]RAR压缩包密码破解原理
- unity,射手游戏
- 【杂谈】想成为机器学习学霸?先学会做笔记吧(Evernote,BoostNote,Leanote等)
- 程序员养生之道:Google 是如何鼓励员工多吃蔬菜的?
- 如何快速恢复最近关闭的浏览器标签页面
- 蓝奏云(Lanzou网盘下载链接无法打开的解决方法
- tensorflow学习笔记(二十七):leaky relu
- MySQL 基础——MySQL 起步