IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Java内部利用RestTemplate发送Http请求 -> 正文阅读

[网络协议]Java内部利用RestTemplate发送Http请求

1.新建请求工厂:

RestTemplate 默认有两种工厂对象实现方式,都是 ClientHttpRequestFactory 的子类。如下:

1)SimpleClientHttpRequestFactory 底层使用 java.net.HttpUrlConnection,可配置证书。

2)HttpComponentsClientHttpRequestFactory 底层使用Apache HttpClient访问远程的Http服务,使用HttpClient同样可以配置连接池和证书等信息,而且功能更强大,配置项更多。

这里使用的是SimpleClientHttpRequestFactory工厂对象:

	// An highlighted block
	//创建SpringHttp请求工厂对象
	SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
	//设置连接超时时间,默认 -1
	requestFactory.setConnectTimeout(10*1000);
	//设置读取内容超时时间,默认 -1
	requestFactory.setReadTimeout(10*1000);
	//设置是否使用缓冲流来存储请求体,默认是 true,缺点是当发送大量数据时,比如put/post的保存和修改,那么可能内存消耗严重。
	requestFactory.setBufferRequestBody(false);

2.创建Spring提供的Http请求客户端RestTemplate对象用于发送请求:

//创建请求客户端,并将SpringHttp请求工厂requestFactory传入构造方法
RestTemplate client = new RestTemplate(requestFactory);

3.创建HTTP请求头:

public void setContentType(@Nullable MediaType mediaType) 设置请求正文(body)的媒体类型,MediaType决定浏览器将以什么形式、什么编码对资源进行解析

HttpHeaders headers = new HttpHeaders();
//设置请求正文(body)的媒体类型,MediaType决定浏览器将以什么形式、什么编码对资源进行解析
headers.setContentType(MediaType.APPLICATION_PROBLEM_JSON_UTF8);

4.创建HTTP请求实体HttpEntity:

//HttpEntity表示一个 HTTP 请求或响应实体,由头部和主体组成: new HttpEntity(<T> requestBody, MultiValueMap<String, String> headers);
org.springframework.http.HttpEntity requestEntity = new org.springframework.http.HttpEntity(JSONObject.toJSON("{a:1,b:2}"), headers);

5.用RestTemplate的exchange()方法发送请求, 并用 ResponseEntity 接收响应主体(ResponseBody)的内容:

//RestTemplate.exchange(String URL(请求地址), HttpMethod method(请求方法), HttpEntity<?> requestEntity(请求主体), Class<T> responseType(返回类型), [Object... uriVariables])
ResponseEntity httpres = client.exchange(URL.toString(), HttpMethod.POST, requestEntity, String.class);

完整请求过程:

import org.springframework.http.*;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import java.lang.Exception;
import java.util.*;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

@Controller
@RestController
@RequestMapping("/api/AFS_ORDER")
public class AFS_OrderController extends BaseController {

	@GetMapping("/sendInfo")
	@ResponseBody
	public Object sendInfo(@RequestParam(value="isBatch",required = false,defaultValue = "否")String isBatch,@RequestParam(value="objectId",required = false)String objectId) throws Exception {
		try {        
		    SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
		    //设置连接超时时间,默认 -1
		    requestFactory.setConnectTimeout(10*1000);
		    //设置读取内容超时时间,默认 -1
		    requestFactory.setReadTimeout(10*1000);
		    //设置是否使用缓冲流来存储请求体,默认是 true,缺点是当发送大量数据时,比如put/post的保存和修改,那么可能内存消耗严重。
		    requestFactory.setBufferRequestBody(false);
		
		    RestTemplate client = new RestTemplate(requestFactory);
		
		    HttpHeaders headers = new HttpHeaders();
		    //设置请求正文(body)的媒体类型,MediaType决定浏览器将以什么形式、什么编码对资源进行解析
		    headers.setContentType(MediaType.APPLICATION_PROBLEM_JSON_UTF8);
		
		    //HttpEntity表示一个 HTTP 请求或响应实体,由头部和主体组成: new HttpEntity(<T> requestBody, MultiValueMap<String, String> headers);
		    HttpEntity requestEntity = new HttpEntity(JSONObject.toJSON("{a:1,b:2}"), headers);
		
		    //RestTemplate.exchange(String URL(请求地址), HttpMethod method(请求方法), HttpEntity<?> requestEntity(请求主体), Class<T> responseType(返回类型), [Object... uriVariables])
		    ResponseEntity httpres = client.exchange(URL.toString(), HttpMethod.POST, requestEntity, String.class);
		    }catch(Exception e){
		        throw new RuntimeException(e);
		    }
	}

}

?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-29 16:38:29  更:2021-11-29 16:40:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:31:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码