RestTemplate模板對象封裝HttpClient 對PRC的實現

1. RestTemplate模板對象介紹

1.1創建spring-resttmplate(jar)項目

1.2添加依賴

1.3  application-server.xml

1.4 測試restTemplate對象發送post請求

1.5使用RestTemplate對象發送Get請求

1.6 使用RestTemplate對象發送Post請求

代碼總結:



1. RestTemplate模板對象介紹

Spring提供的用來發送http請求的對象,完成httpclient操作的封裝

1.1創建spring-resttmplate(jar)項目

1.2添加依賴

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.bjsxt.rest</groupId>
  <artifactId>spring-resttemplate</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
  	<!-- spring依賴 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>4.3.18.RELEASE</version>
	</dependency>
	<!-- 添加jackson依賴 -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.9.3</version>
		</dependency>
  </dependencies>
</project>

1.3  application-server.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"      
	xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"              
    xsi:schemaLocation="                                               
            http://www.springframework.org/schema/beans    
            http://www.springframework.org/schema/beans/spring-beans.xsd 
            http://www.springframework.org/schema/context    
            http://www.springframework.org/schema/context/spring-context.xsd   
          ">
   	<!-- 實例化RestTemplate對象 -->
   	<bean id="template" class="org.springframework.web.client.RestTemplate"></bean>
     
     
     
</beans>

1.4 測試restTemplate對象發送post請求

package com.bjsxt.app;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.web.client.RestTemplate;

import com.bjsxt.pojo.Orders;

public class RestTemplateApp {

	static RestTemplate template;
	/***
	 * 測試RestTemplate對象的使用
	 */
	public static void main(String[] args) {
		//加載Spring容器
		ApplicationContext ac
			=new ClassPathXmlApplicationContext("application-service.xml");
		//獲得容器中的RestTemplate對象
		template = (RestTemplate) ac.getBean("template");
		
		sendPost();
	}
	
	/***
	 * 是RestTemplate對象發送Post
	 */
	public static void sendPost() {
		
		//創建LinkedMultiValueMap封裝請求頭信息
		LinkedMultiValueMap<String,String> 
			headers=new LinkedMultiValueMap<String,String>();
		headers.add("Content-Type", "application/x-www-form-urlencoded");
		
		//封裝請求體數據
		LinkedMultiValueMap<String,String> body=
				new LinkedMultiValueMap<String,String>();
		body.add("vid", "12345678");
		
		
		//創建HttpEntity對象,封裝請求體和請求頭信息
		HttpEntity<LinkedMultiValueMap<String,String>> 
			entity=new HttpEntity<>(body,headers);
		
		String url="http://localhost:8081/loadOrdersList";
		//發送http,post請求,獲得請求體
		//Orders[] results=template.postForObject(url,entity, Orders[].class);
		//List<Orders> asList = Arrays.asList(results);
		
		//發送http,post請求,響應回來請求頭和請求體
		ResponseEntity<Orders[]> response 
			= template.postForEntity(url,entity, Orders[].class);
		//獲得請求頭
		int statusCodeValue = response.getStatusCodeValue();
		System.out.println(statusCodeValue);
		//獲得請求體
		Orders[] results = response.getBody();
		for(Orders orders:results) {
			System.out.println(orders.getId()+"\t"+orders.getRemark()
			+"\t"+orders.getOdate()+"\t"+orders.getVip());
		}
	}
	/***
	 * 是RestTemplate對象發送Get
	 */
	/***
	 * 是RestTemplate發送Post請求,提交json字符串
	 */
	
	
}

1.5使用RestTemplate對象發送Get請求

/***
	 * 是RestTemplate對象發送Get
	 */
	public static void sendGet() {
		String url="http://localhost:8081/loadOrders?id=888888";
		/***
		 * ResponseEntity 封裝了請求頭和請求體
		 */
		//ResponseEntity<Orders> entity = template.getForEntity(url, Orders.class);
		//Orders orders = entity.getBody();
		
		//只獲得請求體
		Orders orders = template.getForObject(url, Orders.class);
		System.out.println(orders.getId()+"\t"+orders.getRemark()
			+"\t"+orders.getVip()+"\t"+orders.getOdate());
		
	}

1.6 使用RestTemplate對象發送Post請求

/***
	 * 是RestTemplate發送Post請求,提交json字符串
	 */
	public static void sendPostObject() {
		//創建Orders對象
		Orders orders=new Orders();
		orders.setId(77777777);
		orders.setRemark("週末配送....");
		orders.setOdate("2010-10-10");
		orders.setVip(99999);
		
		//封裝請求頭信息
		HttpHeaders header=new HttpHeaders();
		header.setContentType(MediaType.APPLICATION_JSON_UTF8);
		
		//將javabean對象轉化爲json字符串
		String jsonString = JSON.toJSONString(orders);
		//將請求體和請求頭信息封裝
		HttpEntity<String> entity=new HttpEntity<String>(jsonString,header);
		
		String url="http://localhost:8081/saveOrders";
		//發送post請求
		Map result = template.postForObject(url, entity, Map.class);
		System.out.println(result);
		
	}

 

代碼總結:

import java.util.Map;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.web.client.RestTemplate;

import com.alibaba.fastjson.JSON;
import com.bjsxt.pojo.Orders;
import com.fasterxml.jackson.databind.util.JSONPObject;

public class RestTemplateTest {
	static RestTemplate template;

	public static void main(String[] args) {
		// 加載Spring容器
		ApplicationContext ac = new ClassPathXmlApplicationContext("application-service.xml");
		// 獲得容器中的RestTemplate對象
		template = (RestTemplate) ac.getBean("template");

		sendObject();
	}

	// 發送post請求
	public static void sendPost() {
		// 創建LinkedMultiValueMap封裝請求頭信息
		LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
		headers.add("Content-Type", "application/x-www-form-urlencoded");

		// 封裝請求體數據
		LinkedMultiValueMap<String, String> body = new LinkedMultiValueMap<String, String>();
		body.add("vid", "12345678");

		// 創建HttpEntity對象,封裝請求體和請求頭信息
		HttpEntity<LinkedMultiValueMap<String, String>> entity = new HttpEntity<>(body, headers);

		String url = "http://localhost:8081/loadOrdersList";
		// 發送http,post請求,獲得請求體
		// Orders[] results=template.postForObject(url,entity, Orders[].class);
		// List<Orders> asList = Arrays.asList(results);

		// 發送http,post請求,響應回來請求頭和請求體
		ResponseEntity<Orders[]> response = template.postForEntity(url, entity, Orders[].class);
		// 獲得請求頭
		int statusCodeValue = response.getStatusCodeValue();
		System.out.println(statusCodeValue);
		// 獲得請求體
		Orders[] results = response.getBody();
		for (Orders orders : results) {
			System.out.println(
					orders.getId() + "\t" + orders.getRemark() + "\t" + orders.getOdate() + "\t" + orders.getVip());
		}
	}

	// 發送get請求
	public static void sendGet() {
		String url = "http://localhost:8081/selectOrder?id=88888";
		ResponseEntity<Orders> response = template.getForEntity(url, Orders.class);
		Orders body = response.getBody();
		System.out.println(body);
	}

	// 發送對象json字符串
	public static void sendObject() {
		// 創建Orders對象
		Orders orders = new Orders();
		orders.setId(77777777);
		orders.setRemark("週末配送....");
		orders.setOdate("2010-10-10");
		orders.setVip(99999);
		String url="http://localhost:8081/addOrders";
		//把對象封裝爲json字符串
		String jsonString = JSON.toJSONString(orders);
		//封裝響應頭爲json'格式的響應
		HttpHeaders header=new HttpHeaders();
		header.setContentType(MediaType.APPLICATION_JSON_UTF8);
		//傳入兩個對象(第一個是請求體、第二個是請求頭)
		HttpEntity<String>request=new HttpEntity<>(jsonString,header);
		Map<String, String>map
			= template.postForObject(url, request, Map.class);
		System.out.println(map);
		
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章