欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談java調(diào)用Restful API接口的方式

 更新時(shí)間:2017年12月19日 14:00:48   作者:三 豐  
這篇文章主要介紹了淺談java調(diào)用Restful API接口的方式,具有一定借鑒價(jià)值,需要的朋友可以參考下。

摘要:最近有一個(gè)需求,為客戶提供一些RestfulAPI接口,QA使用postman進(jìn)行測(cè)試,但是postman的測(cè)試接口與java調(diào)用的相似但并不相同,于是想自己寫(xiě)一個(gè)程序去測(cè)試RestfulAPI接口,由于使用的是HTTPS,所以還要考慮到對(duì)于HTTPS的處理。由于我也是首次使用Java調(diào)用restful接口,所以還要研究一番,自然也是查閱了一些資料。

分析:這個(gè)問(wèn)題與模塊之間的調(diào)用不同,比如我有兩個(gè)模塊frontend和backend,frontend提供前臺(tái)展示,backend提供數(shù)據(jù)支持。之前使用過(guò)Hession去把backend提供的服務(wù)注冊(cè)成遠(yuǎn)程服務(wù),在frontend端可以通過(guò)這種遠(yuǎn)程服務(wù)直接調(diào)到backend的接口。但這對(duì)于一個(gè)公司自己的一個(gè)項(xiàng)目耦合性比較高的情況下使用,沒(méi)有問(wèn)題。但是如果給客戶注冊(cè)這種遠(yuǎn)程服務(wù),似乎不太好,耦合性太高。所以就考慮用一下方式進(jìn)行處理。

基本介紹

Restful接口的調(diào)用,前端一般使用ajax調(diào)用,后端可以使用的方法比較多,

本次介紹三種:

1.HttpURLConnection實(shí)現(xiàn)

2.HttpClient實(shí)現(xiàn)

3.Spring的RestTemplate

一、HttpClient

HttpClient大家也許比較熟悉但又比較陌生,熟悉是知道他可以遠(yuǎn)程調(diào)用比如請(qǐng)求一個(gè)URL,然后在response里獲取到返回狀態(tài)和返回信息,但是今天講的稍微復(fù)雜一點(diǎn),因?yàn)榻裉斓闹黝}是HTTPS,這個(gè)牽涉到證書(shū)或用戶認(rèn)證的問(wèn)題。

確定使用HttpClient之后,查詢相關(guān)資料,發(fā)現(xiàn)HttpClient的新版本與老版本不同,隨然兼容老版本,但已經(jīng)不提倡老版本是使用方式,很多都已經(jīng)標(biāo)記為過(guò)時(shí)的方法或類。今天就分別使用老版本4.2和最新版本4.5.3來(lái)寫(xiě)代碼。

老版本4.2

需要認(rèn)證

在準(zhǔn)備證書(shū)階段選擇的是使用證書(shū)認(rèn)證

package com.darren.test.https.v42;
import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import org.apache.http.conn.ssl.SSLSocketFactory;
public class HTTPSCertifiedClient extends HTTPSClient {
	public HTTPSCertifiedClient() {
	}
	@Override 
	  public void prepareCertificate() throws Exception {
		// 獲得密匙庫(kù) 
		KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
		FileInputStream instream = new FileInputStream( 
		        new File("C:/Users/zhda6001/Downloads/software/xxx.keystore"));
		// FileInputStream instream = new FileInputStream(new File("C:/Users/zhda6001/Downloads/xxx.keystore")); 
		// 密匙庫(kù)的密碼 
		trustStore.load(instream, "password".toCharArray());
		// 注冊(cè)密匙庫(kù) 
		this.socketFactory = new SSLSocketFactory(trustStore);
		// 不校驗(yàn)域名 
		socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
	}
}

跳過(guò)認(rèn)證

在準(zhǔn)備證書(shū)階段選擇的是跳過(guò)認(rèn)證

package com.darren.test.https.v42;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.conn.ssl.SSLSocketFactory;
public class HTTPSTrustClient extends HTTPSClient {
	public HTTPSTrustClient() {
	}
	@Override 
	  public void prepareCertificate() throws Exception {
		// 跳過(guò)證書(shū)驗(yàn)證 
		SSLContext ctx = SSLContext.getInstance("TLS");
		X509TrustManager tm = new X509TrustManager() {
			@Override 
			      public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
			}
			@Override 
			      public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
			}
			@Override 
			      public X509Certificate[] getAcceptedIssuers() {
				return null;
			}
		}
		;
		// 設(shè)置成已信任的證書(shū) 
		ctx.init(null, new TrustManager[] {
			tm
		}
		, null);
		// 穿件SSL socket 工廠,并且設(shè)置不檢查host名稱 
		this.socketFactory = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
	}
}

總結(jié)

現(xiàn)在發(fā)現(xiàn)這兩個(gè)類都繼承了同一個(gè)類HTTPSClient,并且HTTPSClient繼承了DefaultHttpClient類,可以發(fā)現(xiàn),這里使用了模板方法模式。

package com.darren.test.https.v42;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
public abstract class HTTPSClient extends DefaultHttpClient {
	protected SSLSocketFactory socketFactory;
	/** 
   * 初始化HTTPSClient 
   * 
   * @return 返回當(dāng)前實(shí)例 
   * @throws Exception 
   */
	public HTTPSClient init() throws Exception {
		this.prepareCertificate();
		this.regist();
		return this;
	}
	/** 
   * 準(zhǔn)備證書(shū)驗(yàn)證 
   * 
   * @throws Exception 
   */
	public abstract void prepareCertificate() throws Exception;
	/** 
   * 注冊(cè)協(xié)議和端口, 此方法也可以被子類重寫(xiě) 
   */
	protected void regist() {
		ClientConnectionManager ccm = this.getConnectionManager();
		SchemeRegistry sr = ccm.getSchemeRegistry();
		sr.register(new Scheme("https", 443, socketFactory));
	}
}

下邊是工具類

package com.darren.test.https.v42;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class HTTPSClientUtil {
	private static final String DEFAULT_CHARSET = "UTF-8";
	public static String doPost(HTTPSClient httpsClient, String url, Map<String, String> paramHeader, 
	      Map<String, String> paramBody) throws Exception {
		return doPost(httpsClient, url, paramHeader, paramBody, DEFAULT_CHARSET);
	}
	public static String doPost(HTTPSClient httpsClient, String url, Map<String, String> paramHeader, 
	      Map<String, String> paramBody, String charset) throws Exception {
		String result = null;
		HttpPost httpPost = new HttpPost(url);
		setHeader(httpPost, paramHeader);
		setBody(httpPost, paramBody, charset);
		HttpResponse response = httpsClient.execute(httpPost);
		if (response != null) {
			HttpEntity resEntity = response.getEntity();
			if (resEntity != null) {
				result = EntityUtils.toString(resEntity, charset);
			}
		}
		return result;
	}
	public static String doGet(HTTPSClient httpsClient, String url, Map<String, String> paramHeader, 
	      Map<String, String> paramBody) throws Exception {
		return doGet(httpsClient, url, paramHeader, paramBody, DEFAULT_CHARSET);
	}
	public static String doGet(HTTPSClient httpsClient, String url, Map<String, String> paramHeader, 
	      Map<String, String> paramBody, String charset) throws Exception {
		String result = null;
		HttpGet httpGet = new HttpGet(url);
		setHeader(httpGet, paramHeader);
		HttpResponse response = httpsClient.execute(httpGet);
		if (response != null) {
			HttpEntity resEntity = response.getEntity();
			if (resEntity != null) {
				result = EntityUtils.toString(resEntity, charset);
			}
		}
		return result;
	}
	private static void setHeader(HttpRequestBase request, Map<String, String> paramHeader) {
		// 設(shè)置Header 
		if (paramHeader != null) {
			Set<String> keySet = paramHeader.keySet();
			for (String key : keySet) {
				request.addHeader(key, paramHeader.get(key));
			}
		}
	}
	private static void setBody(HttpPost httpPost, Map<String, String> paramBody, String charset) throws Exception {
		// 設(shè)置參數(shù) 
		if (paramBody != null) {
			List<NameValuePair> list = new ArrayList<NameValuePair>();
			Set<String> keySet = paramBody.keySet();
			for (String key : keySet) {
				list.add(new BasicNameValuePair(key, paramBody.get(key)));
			}
			if (list.size() > 0) {
				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, charset);
				httpPost.setEntity(entity);
			}
		}
	}
}

然后是測(cè)試類:

package com.darren.test.https.v42;
import java.util.HashMap;
import java.util.Map;
public class HTTPSClientTest {
	public static void main(String[] args) throws Exception {
		HTTPSClient httpsClient = null;
		httpsClient = new HTTPSTrustClient().init();
		//httpsClient = new HTTPSCertifiedClient().init(); 
		String url = "https://1.2.6.2:8011/xxx/api/getToken";
		//String url = "https://1.2.6.2:8011/xxx/api/getHealth"; 
		Map<String, String> paramHeader = new HashMap<>();
		//paramHeader.put("Content-Type", "application/json"); 
		paramHeader.put("Accept", "application/xml");
		Map<String, String> paramBody = new HashMap<>();
		paramBody.put("client_id", "ankur.tandon.ap@xxx.com");
		paramBody.put("client_secret", "P@ssword_1");
		String result = HTTPSClientUtil.doPost(httpsClient, url, paramHeader, paramBody);
		//String result = HTTPSClientUtil.doGet(httpsClient, url, null, null); 
		System.out.println(result);
	}
}

返回信息:

<?xml version="1.0" encoding="utf-8"?> 
 <token>jkf8RL0sw+Skkflj8RbKI5hP1bEQK8PrCuTZPpBINqMYKRMxY1kWCjmCfT191Zpp88VV1aGHW8oYNWjEYS0axpLuGAX89ejCoWNbikCc1UvfyesXHLktcJqyUFiVjevhrEQxJPHncLQYWP+Xse5oD9X8vKFKk7InNTMRzQK7YBTZ/e3U7gswM/5cvAHFl6o9rEq9cWPXavZNohyvnXsohSzDo+BXAtXxa1xpEDLy/8h/UaP4n4dlZDJJ3B8t1Xh+CRRIoMOPxf7c5wKhHtOkEOeXW+xoPQKKSx5CKWwJpPuGIIFWF/PaqWg+JUOsVT7QGdPv8PMWJ9DwEwjTdxguDg==</token> 

新版本4.5.3

需要認(rèn)證

package com.darren.test.https.v45;
import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import javax.net.ssl.SSLContext;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.ssl.SSLContexts;
public class HTTPSCertifiedClient extends HTTPSClient {
	public HTTPSCertifiedClient() {
	}
	@Override 
	  public void prepareCertificate() throws Exception {
		// 獲得密匙庫(kù) 
		KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
		FileInputStream instream = new FileInputStream( 
		        new File("C:/Users/zhda6001/Downloads/software/xxx.keystore"));
		// FileInputStream instream = new FileInputStream(new File("C:/Users/zhda6001/Downloads/xxx.keystore")); 
		try {
			// 密匙庫(kù)的密碼 
			trustStore.load(instream, "password".toCharArray());
		}
		finally {
			instream.close();
		}
		SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(trustStore, TrustSelfSignedStrategy.INSTANCE) 
		        .build();
		this.connectionSocketFactory = new SSLConnectionSocketFactory(sslcontext);
	}
}

跳過(guò)認(rèn)證

package com.darren.test.https.v45;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
public class HTTPSTrustClient extends HTTPSClient {
	public HTTPSTrustClient() {
	}
	@Override 
	  public void prepareCertificate() throws Exception {
		// 跳過(guò)證書(shū)驗(yàn)證 
		SSLContext ctx = SSLContext.getInstance("TLS");
		X509TrustManager tm = new X509TrustManager() {
			@Override 
			      public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
			}
			@Override 
			      public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
			}
			@Override 
			      public X509Certificate[] getAcceptedIssuers() {
				return null;
			}
		}
		;
		// 設(shè)置成已信任的證書(shū) 
		ctx.init(null, new TrustManager[] {
			tm
		}
		, null);
		this.connectionSocketFactory = new SSLConnectionSocketFactory(ctx);
	}
}

總結(jié)

package com.darren.test.https.v45;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
public abstract class HTTPSClient extends HttpClientBuilder {
	private CloseableHttpClient client;
	protected ConnectionSocketFactory connectionSocketFactory;
	/** 
   * 初始化HTTPSClient 
   * 
   * @return 返回當(dāng)前實(shí)例 
   * @throws Exception 
   */
	public CloseableHttpClient init() throws Exception {
		this.prepareCertificate();
		this.regist();
		return this.client;
	}
	/** 
   * 準(zhǔn)備證書(shū)驗(yàn)證 
   * 
   * @throws Exception 
   */
	public abstract void prepareCertificate() throws Exception;
	/** 
   * 注冊(cè)協(xié)議和端口, 此方法也可以被子類重寫(xiě) 
   */
	protected void regist() {
		// 設(shè)置協(xié)議http和https對(duì)應(yīng)的處理socket鏈接工廠的對(duì)象 
		Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() 
		        .register("http", PlainConnectionSocketFactory.INSTANCE) 
		        .register("https", this.connectionSocketFactory) 
		        .build();
		PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
		HttpClients.custom().setConnectionManager(connManager);
		// 創(chuàng)建自定義的httpclient對(duì)象 
		this.client = HttpClients.custom().setConnectionManager(connManager).build();
		// CloseableHttpClient client = HttpClients.createDefault();
	}
}

工具類:

package com.darren.test.https.v45;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class HTTPSClientUtil {
	private static final String DEFAULT_CHARSET = "UTF-8";
	public static String doPost(HttpClient httpClient, String url, Map<String, String> paramHeader, 
	      Map<String, String> paramBody) throws Exception {
		return doPost(httpClient, url, paramHeader, paramBody, DEFAULT_CHARSET);
	}
	public static String doPost(HttpClient httpClient, String url, Map<String, String> paramHeader, 
	      Map<String, String> paramBody, String charset) throws Exception {
		String result = null;
		HttpPost httpPost = new HttpPost(url);
		setHeader(httpPost, paramHeader);
		setBody(httpPost, paramBody, charset);
		HttpResponse response = httpClient.execute(httpPost);
		if (response != null) {
			HttpEntity resEntity = response.getEntity();
			if (resEntity != null) {
				result = EntityUtils.toString(resEntity, charset);
			}
		}
		return result;
	}
	public static String doGet(HttpClient httpClient, String url, Map<String, String> paramHeader, 
	      Map<String, String> paramBody) throws Exception {
		return doGet(httpClient, url, paramHeader, paramBody, DEFAULT_CHARSET);
	}
	public static String doGet(HttpClient httpClient, String url, Map<String, String> paramHeader, 
	      Map<String, String> paramBody, String charset) throws Exception {
		String result = null;
		HttpGet httpGet = new HttpGet(url);
		setHeader(httpGet, paramHeader);
		HttpResponse response = httpClient.execute(httpGet);
		if (response != null) {
			HttpEntity resEntity = response.getEntity();
			if (resEntity != null) {
				result = EntityUtils.toString(resEntity, charset);
			}
		}
		return result;
	}
	private static void setHeader(HttpRequestBase request, Map<String, String> paramHeader) {
		// 設(shè)置Header 
		if (paramHeader != null) {
			Set<String> keySet = paramHeader.keySet();
			for (String key : keySet) {
				request.addHeader(key, paramHeader.get(key));
			}
		}
	}
	private static void setBody(HttpPost httpPost, Map<String, String> paramBody, String charset) throws Exception {
		// 設(shè)置參數(shù) 
		if (paramBody != null) {
			List<NameValuePair> list = new ArrayList<NameValuePair>();
			Set<String> keySet = paramBody.keySet();
			for (String key : keySet) {
				list.add(new BasicNameValuePair(key, paramBody.get(key)));
			}
			if (list.size() > 0) {
				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, charset);
				httpPost.setEntity(entity);
			}
		}
	}
}

測(cè)試類:

package com.darren.test.https.v45;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.client.HttpClient;
public class HTTPSClientTest {
	public static void main(String[] args) throws Exception {
		HttpClient httpClient = null;
		//httpClient = new HTTPSTrustClient().init(); 
		httpClient = new HTTPSCertifiedClient().init();
		String url = "https://1.2.6.2:8011/xxx/api/getToken";
		//String url = "https://1.2.6.2:8011/xxx/api/getHealth"; 
		Map<String, String> paramHeader = new HashMap<>();
		paramHeader.put("Accept", "application/xml");
		Map<String, String> paramBody = new HashMap<>();
		paramBody.put("client_id", "ankur.tandon.ap@xxx.com");
		paramBody.put("client_secret", "P@ssword_1");
		String result = HTTPSClientUtil.doPost(httpClient, url, paramHeader, paramBody);
		//String result = HTTPSClientUtil.doGet(httpsClient, url, null, null); 
		System.out.println(result);
	}
}

結(jié)果:

<?xml version="1.0" encoding="utf-8"?> 
 
<token>RxitF9//7NxwXJS2cjIjYhLtvzUNvMZxxEQtGN0u07sC9ysJeIbPqte3hCjULSkoXPEUYGUVeyI9jv7/WikLrzxYKc3OSpaTSM0kCbCKphu0TB2Cn/nfzv9fMLueOWFBdyz+N0sEiI9K+0Gp7920DFEncn17wUJVmC0u2jwvM5FAjQKmilwodXZ6a0Dq+D7dQDJwVcwxBvJ2ilhyIb3pr805Vppmi9atXrVAKO0ODa006wEJFOfcgyG5p70wpJ5rrBL85vfy9WCvkd1R7j6NVjhXgH2gNimHkjEJorMjdXW2gKiUsiWsELi/XPswao7/CTWNwTnctGK8PX2ZUB0ZfA==</token> 

二、HttpURLConnection

@Controller
public class RestfulAction {
	@Autowired
	  private UserService userService;
	// 修改
	@RequestMapping(value = "put/{param}", method = RequestMethod.PUT)
	  public @ResponseBody String put(@PathVariable String param) {
		return "put:" + param;
	}
	// 新增
	@RequestMapping(value = "post/{param}", method = RequestMethod.POST)
	  public @ResponseBody String post(@PathVariable String param,String id,String name) {
		System.out.println("id:"+id);
		System.out.println("name:"+name);
		return "post:" + param;
	}
	// 刪除
	@RequestMapping(value = "delete/{param}", method = RequestMethod.DELETE)
	  public @ResponseBody String delete(@PathVariable String param) {
		return "delete:" + param;
	}
	// 查找
	@RequestMapping(value = "get/{param}", method = RequestMethod.GET)
	  public @ResponseBody String get(@PathVariable String param) {
		return "get:" + param;
	}
	// HttpURLConnection 方式調(diào)用Restful接口
	// 調(diào)用接口
	@RequestMapping(value = "dealCon/{param}")
	  public @ResponseBody String dealCon(@PathVariable String param) {
		try {
			String url = "http://localhost:8080/tao-manager-web/";
			url+=(param+"/xxx");
			URL restServiceURL = new URL(url);
			HttpURLConnection httpConnection = (HttpURLConnection) restServiceURL
			          .openConnection();
			//param 輸入小寫(xiě),轉(zhuǎn)換成 GET POST DELETE PUT 
			httpConnection.setRequestMethod(param.toUpperCase());
			//      httpConnection.setRequestProperty("Accept", "application/json");
			if("post".equals(param)){
				//打開(kāi)輸出開(kāi)關(guān)
				httpConnection.setDoOutput(true);
				//        httpConnection.setDoInput(true);
				//傳遞參數(shù)
				String input = "&id="+ URLEncoder.encode("abc", "UTF-8");
				input+="&name="+ URLEncoder.encode("啊啊啊", "UTF-8");
				OutputStream outputStream = httpConnection.getOutputStream();
				outputStream.write(input.getBytes());
				outputStream.flush();
			}
			if (httpConnection.getResponseCode() != 200) {
				throw new RuntimeException(
				            "HTTP GET Request Failed with Error code : "
				                + httpConnection.getResponseCode());
			}
			BufferedReader responseBuffer = new BufferedReader(
			          new InputStreamReader((httpConnection.getInputStream())));
			String output;
			System.out.println("Output from Server: \n");
			while ((output = responseBuffer.readLine()) != null) {
				System.out.println(output);
			}
			httpConnection.disconnect();
		}
		catch (MalformedURLException e) {
			e.printStackTrace();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
		return "success";
	}
}

三、Spring的RestTemplate

springmvc.xml增加

<!-- 配置RestTemplate -->
  <!--Http client Factory -->
  <bean id="httpClientFactory"
    class="org.springframework.http.client.SimpleClientHttpRequestFactory">
    <property name="connectTimeout" value="10000" />
    <property name="readTimeout" value="10000" />
  </bean>

  <!--RestTemplate -->
  <bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <constructor-arg ref="httpClientFactory" />
  </bean>

controller

@Controller
public class RestTemplateAction {
	@Autowired
	  private RestTemplate template;
	@RequestMapping("RestTem")
	  public @ResponseBody User RestTem(String method) {
		User user = null;
		//查找
		if ("get".equals(method)) {
			user = template.getForObject(
			          "http://localhost:8080/tao-manager-web/get/{id}",
			          User.class, "嗚嗚嗚嗚");
			//getForEntity與getForObject的區(qū)別是可以獲取返回值和狀態(tài)、頭等信息
			ResponseEntity<User> re = template.
			          getForEntity("http://localhost:8080/tao-manager-web/get/{id}",
			          User.class, "嗚嗚嗚嗚");
			System.out.println(re.getStatusCode());
			System.out.println(re.getBody().getUsername());
			//新增
		} else if ("post".equals(method)) {
			HttpHeaders headers = new HttpHeaders();
			headers.add("X-Auth-Token", UUID.randomUUID().toString());
			MultiValueMap<String, String> postParameters = new LinkedMultiValueMap<String, String>();
			postParameters.add("id", "啊啊啊");
			postParameters.add("name", "部版本");
			HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(
			          postParameters, headers);
			user = template.postForObject(
			          "http://localhost:8080/tao-manager-web/post/aaa", requestEntity,
			          User.class);
			//刪除
		} else if ("delete".equals(method)) {
			template.delete("http://localhost:8080/tao-manager-web/delete/{id}","aaa");
			//修改
		} else if ("put".equals(method)) {
			template.put("http://localhost:8080/tao-manager-web/put/{id}",null,"bbb");
		}
		return user;
	}
}

以上就是本文關(guān)于淺談java調(diào)用Restful API接口的方式的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他Java相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • Netty分布式ByteBuf使用subPage級(jí)別內(nèi)存分配剖析

    Netty分布式ByteBuf使用subPage級(jí)別內(nèi)存分配剖析

    這篇文章主要為大家介紹了Netty分布式ByteBuf使用subPage級(jí)別內(nèi)存分配剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • 詳解idea maven項(xiàng)目如何使用lib下得jar包

    詳解idea maven項(xiàng)目如何使用lib下得jar包

    這篇文章主要介紹了詳解idea maven項(xiàng)目如何使用lib下得jar包,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 新手初學(xué)Java集合框架

    新手初學(xué)Java集合框架

    這篇文章主要介紹了JAVA集合框架的相關(guān)知識(shí),文中講解非常細(xì)致,幫助大家更好的理解學(xué)習(xí)JAVA框架,感興趣的朋友快來(lái)了解下,希望能給你帶來(lái)幫助
    2021-07-07
  • springboot實(shí)現(xiàn)微信掃碼登錄的項(xiàng)目實(shí)踐

    springboot實(shí)現(xiàn)微信掃碼登錄的項(xiàng)目實(shí)踐

    微信掃碼功能是目前第三方登錄常見(jiàn)功能,前不久有個(gè)項(xiàng)目剛好用上,本文主要介紹了springboot實(shí)現(xiàn)微信掃碼登錄的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • Java?將Excel轉(zhuǎn)為UOS的操作方法

    Java?將Excel轉(zhuǎn)為UOS的操作方法

    以.uos為后綴的文件,表示Uniform?Office?Spreadsheet文件,是一種國(guó)產(chǎn)的辦公文件格式,該格式以統(tǒng)一辦公格式(UOF)創(chuàng)建,使用XML和壓縮保存電子表格,這篇文章主要介紹了Java?將Excel轉(zhuǎn)為UOS,需要的朋友可以參考下
    2022-09-09
  • JAVA設(shè)計(jì)模式之組合模式原理與用法詳解

    JAVA設(shè)計(jì)模式之組合模式原理與用法詳解

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之組合模式,簡(jiǎn)單說(shuō)明了組合模式的原理,并結(jié)合實(shí)例分析了java組合模式的具體用法,需要的朋友可以參考下
    2017-08-08
  • 詳解Java 中的嵌套類與內(nèi)部類

    詳解Java 中的嵌套類與內(nèi)部類

    這篇文章主要介紹了詳解Java 中的嵌套類與內(nèi)部類的相關(guān)資料,希望通過(guò)本文大家能掌握J(rèn)ava 嵌套類與內(nèi)部類的使用方法,需要的朋友可以參考下
    2017-09-09
  • SpringBoot整合EasyExcel實(shí)現(xiàn)文件導(dǎo)入導(dǎo)出

    SpringBoot整合EasyExcel實(shí)現(xiàn)文件導(dǎo)入導(dǎo)出

    這篇文章主要介紹了SpringBoot整合EasyExcel實(shí)現(xiàn)文件導(dǎo)入導(dǎo)出的方法,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot,感興趣的朋友可以了解下
    2021-05-05
  • java使用POI批量導(dǎo)入excel數(shù)據(jù)的方法

    java使用POI批量導(dǎo)入excel數(shù)據(jù)的方法

    這篇文章主要為大家詳細(xì)介紹了java使用POI批量導(dǎo)入excel數(shù)據(jù)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • MyBatis在DAO層定義接口返回類型泛型無(wú)效的解決

    MyBatis在DAO層定義接口返回類型泛型無(wú)效的解決

    這篇文章主要介紹了MyBatis在DAO層定義接口返回類型泛型無(wú)效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論