Http简介
http请求是采用TCP协议进行传输的,是一种超文本传输协议,可以实现客户端和服务端之间通信的请求响应协议,可以用来客户端和服务器之间传输数据,发动请求。
浏览器会向服务器发送请求,经过三次握手,建立通信,接着服务器向客户端返回响应;响应的内容包含响应头,响应内容等等。
常见的http请求一共有四种,分别是GET,POST,PUT,DELETE
发送http的工具
1.浏览器直接发送http请求
2.通过postman发送http请求
3.通过linux机器自带的命令curl来发送http请求
4.通过程序语言发送,比如java,C,C++,.net等语言
java语言发送HTTP请求
httpClient = HttpClients.custom().build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); RequestEntity<?> requestEntity = RequestEntity.post(new URI(url)) .header(HttpHeaders.CONTENT_TYPE, App.APPLICATION_JSON_UTF8_VALUE) .body(request);
创建一个CloseableHttpClient对象,该对象的构造方法是私有的,我们可以直接调用custom方法来初始化该对象
该类是纸质链式变成,直接调用 build 方法创建 CloseableHttpClient 。创建一个 HttpComponentsClientHttpRequestFactory 对象,调用 setHttpCliet 方法发送。可以借助 RestTemplate 来发送post请求,RestTemplate是常见的调用http请求的工具类,支持私有化构建对象。
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); String responseBody = responseEntity.getBody(); logger.info("server response : {}", responseBody); return objectMapper.readValue(responseEntity.getBody(), this.getJavaType(objectMapper, clazz));
借助JackJson将返回的json数据转化为JavaBean.JackJosn 不同于FastJson,是SpringBoot自带的框架,主要是借助ObjectMapper来进行一系列操作,可以调用configure方法增加不同的配置 DeserializationFeature常见的几种配置有
USE_JAVA_ARRAY_FOR_JSON_ARRAY
FAIL_ON_UNKNOWN_PROPERTIES
FAIL_ON_NULL_FOR_PRIMITIVES
FAIL_ON_NUMBERS_FOR_ENUMS
调用readValue方法将json数据转化为JavaBean
总结
Java发送HTTP请求总体不难,主要是分为三步
1.创建一个HttpComponentsClientHttpRequestFactory
2.调用 RestTemplate.exchange方法发送请求
3.利用Json转化器(FastJson或者是JackJson)将Json数据转化为JavaBean.
量变引起质变!