Java中的簡單REST客戶端

如今,大多數用于與某些服務器通信的移動應用程序都使用REST服務。 這些服務也是與JavaScript或jQuery一起使用的常見做法。 現在,我知道在Java中為REST服務創建客戶端的2種方法,在本文中,我將嘗試演示這兩種方法,希望它們能以某種方式對某人有所幫助。

1.使用Apache HttpClient

Apache HttpClient庫簡化了HTTP請求的處理。 要使用此庫,您必須從其網站下載具有相關性的二進制文件。
這是HTTP GET方法的代碼:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
public class Test {public static void main(String[] args) throws ClientProtocolException, IOException {HttpClient client = new DefaultHttpClient();HttpGet request = new HttpGet('http://restUrl');HttpResponse response = client.execute(request);BufferedReader rd = new BufferedReader (new InputStreamReader(response.getEntity().getContent()));String line = '';while ((line = rd.readLine()) != null) {System.out.println(line);}}
}

對于Post方法; 用于在帖子中發送簡單的字符串:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
public class Test {public static void main(String[] args) throws ClientProtocolException, IOException {HttpClient client = new DefaultHttpClient();HttpPost post = new HttpPost('http://restUrl');StringEntity input = new StringEntity('product');post.setEntity(input);HttpResponse response = client.execute(post);BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));String line = '';while ((line = rd.readLine()) != null) {System.out.println(line);}}
}

您還可以通過以下方式發送POJO的完整JSON或XML :將表示JSON或XML的String用作StringEntity的參數,然后設置輸入內容類型。 像這樣:

StringEntity input = new StringEntity('{\'name1\':\'value1\',\'name2\':\'value2\'}'); //here instead of JSON you can also have XML
input.setContentType('application/json');

對于JSON,您可以使用JSONObject創建JSON的字符串表示形式。

JSONObject json = new JSONObject();
json.put('name1', 'value1');
json.put('name2', 'value2');
StringEntity se = new StringEntity( json.toString());

并在后請求中發送多個參數:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
public class Test {public static void main(String[] args) throws ClientProtocolException, IOException {HttpClient client = new DefaultHttpClient();HttpPost post = new HttpPost('http://restUrl');List nameValuePairs = new ArrayList(1);nameValuePairs.add(new BasicNameValuePair('name', 'value')); //you can as many name value pair as you want in the list.post.setEntity(new UrlEncodedFormEntity(nameValuePairs));HttpResponse response = client.execute(post);BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));String line = '';while ((line = rd.readLine()) != null) {System.out.println(line);}}
}

2.使用球衣

Jersey是JSR-311規范(Java中REST支持的規范)的參考實現。 澤西島基本上包含一個REST服務器和一個REST客戶端。 它提供了一個庫來與產生REST服務的服務器通信。 對于http get方法:

import java.io.IOException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import org.apache.http.client.ClientProtocolException;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
public class Test {public static void main(String[] args) throws ClientProtocolException, IOException {ClientConfig config = new DefaultClientConfig();Client client = Client.create(config);WebResource service = client.resource(UriBuilder.fromUri('http://restUrl').build());// getting XML dataSystem.out.println(service. path('restPath').path('resourcePath').accept(MediaType.APPLICATION_JSON).get(String.class));// getting JSON dataSystem.out.println(service. path('restPath').path('resourcePath').accept(MediaType.APPLICATION_XML).get(String.class));}
}

您還可以通過其他媒體格式獲得響應,例如PLAIN或HTML。
對于HTTP POST方法:

import java.io.IOException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriBuilder;
import org.apache.http.client.ClientProtocolException;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.core.util.MultivaluedMapImpl;
public class Test {public static void main(String[] args) throws ClientProtocolException, IOException {ClientConfig config = new DefaultClientConfig();Client client = Client.create(config);WebResource webResource = client.resource(UriBuilder.fromUri('http://restUrl').build());MultivaluedMap formData = new MultivaluedMapImpl();formData.add('name1', 'val1');formData.add('name2', 'val2');ClientResponse response = webResource.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse.class, formData);System.out.println('Response ' + response.getEntity(String.class));}
}

如果您在POST中使用POJO,則可以執行以下操作:

ClientResponse response = webResource.path('restPath').path('resourcePath').
type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, myPojo);
System.out.println('Response ' + response.getEntity(String.class));

這里的myPojo是自定義POJO類的實例。
您還可以使用Jersey的Form類在POST請求中提交多個參數:

import java.io.IOException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import org.apache.http.client.ClientProtocolException;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.representation.Form;
public class Test {public static void main(String[] args) throws ClientProtocolException, IOException {ClientConfig config = new DefaultClientConfig();Client client = Client.create(config);WebResource service = client.resource(UriBuilder.fromUri('http://restUrl').build());Form form = new Form();form.add('name1', 'value1');form.add('name2', 'value1');ClientResponse response = service.path('restPath').path('resourcePath').type(MediaType.APPLICATION_FORM_URLENCODED).post(ClientResponse.class, form);System.out.println('Response ' + response.getEntity(String.class));}
}

祝您編程愉快,別忘了分享!

參考:來自harryjoy博客的JCG合作伙伴 Harsh Raval的Java中的簡單REST客戶端 。


翻譯自: https://www.javacodegeeks.com/2012/09/simple-rest-client-in-java.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371268.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371268.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371268.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3.20 下午

閱讀《藝術學概論》 戲劇沖突是戲劇的靈魂 沖突包括:人物性格的沖突、行為的沖突、 思想感情的沖突乃至心理狀態的沖突等等 轉載于:https://www.cnblogs.com/bgd140206110/p/6590005.html

華為root工具_華為Mate9解鎖后無法ROOT 需要手動刷入Recovery怎么辦【解決方法】...

很多朋友手機到手之后,都希望能夠ROOT使用更多的系統功能。近日有網友向小編詢問,為何華為Mate9解鎖后無法ROOT,明明已經通過官方的解鎖教程解鎖的,但是之后使用“大師”等第三方刷機工具,無法ROOT。其實ROOT的關鍵就在…

JAX-WS入門

JAX-WS代表XML Web Services的Java API。 它是一種Java編程語言API,用于創建Web服務和使用XML進行通信的客戶端。 這篇文章是JAX-WS的快速入門。 先決條件 GlassFish與Eclipse集成在一起 。 創建JAX-WS Web服務 1.在Eclipse中創建一個名為“ com.eviac.blog.jax…

canvas 圖片反色

代碼實例&#xff1a; <!DOCTYPE HTML> <html> <head><meta charset"utf-8"><title>圖片反色</title><style type"text/css">body{ background:black;}#c1{ background:white;}</style><script type&q…

python中的文件父路徑怎么表達_python中的文件父路徑怎么表達_如何在Python中訪問父目錄...

所以我有一個朋友給我的Python腳本&#xff0c;但是我沒有Python的經驗。代碼如下&#xff1a;from os import path, chdir, listdir, mkdir, getcwdfrom sys import argvfrom zipfile import ZipFilefrom time import sleep#Defines what extensions to look for within the f…

Maven的中央倉庫地址

www.mvnrepository.com轉載于:https://www.cnblogs.com/j-liu3323/p/6590435.html

Spring–添加AOP支持

我聽到了一個有關一位高級&#xff08;且酬勞頗豐&#xff09;軟件工程師的故事。 他的任務是記錄他正在研究的項目中每個控制器中的每個方法。 工程師重寫了所有控制器方法&#xff0c;因此使用如下代碼&#xff1a; RequestMapping(method RequestMethod.GET)public String …

vscode python第三方庫檢測_VSCode中使用Pylint檢查python代碼

為什么使用lint在日常開發中&#xff0c;不同開發人員會寫下不同風格的代碼&#xff0c;導致代碼可維護性變差&#xff0c;為了解決風格不一致問題&#xff0c;我們可以制定代碼規范&#xff0c;讓開發人員都遵守同樣的規范編寫代碼。在開發過程中&#xff0c;部分代碼存在質量…

Spring MVC-集成(Integration)-集成LOG4J示例(轉載實踐)

以下內容翻譯自&#xff1a;https://www.tutorialspoint.com/springmvc/springmvc_log4j.htm 說明&#xff1a;示例基于Spring MVC 4.1.6。 以下示例說明如何使用Spring Web MVC框架來觸發LOG4J。首先&#xff0c;讓我們使用Eclipse IDE&#xff0c;并按照以下步驟使用Spring W…

NUMA架構和Java

是時候部署您的應用程序了&#xff0c;期待著采購最適合負載要求的硬件。 如今&#xff0c;具有40核或80核的包裝盒非常普遍。 總體概念是更多的內核&#xff0c;更多的處理能力&#xff0c;更多的吞吐量。 但是我看到了一些相反的結果&#xff0c;表明小型的CPU密集型測試運行…

存儲過程常用技巧

我們在進行pl/sql編程時打交道最多的就是存儲過程了。存儲過程的結構是非常的簡單的&#xff0c;我們在這里除了學習存儲過程的基本結構外&#xff0c;還會學習編寫存儲過程時相關的一些實用的知識。如&#xff1a;游標的處理&#xff0c;異常的處理&#xff0c;集合的選擇等等…

vue是用a標簽打開新頁面_vue 在新窗口打開頁面并設置不同的背景

開發一個新系統&#xff0c;前端用的vue&#xff0c;vue是單體應用&#xff0c;所有頁面都在一個窗口里實現&#xff0c;但項目要求在點button鏈接后要新打開一個瀏覽器頁面&#xff0c;解決方法如下&#xff1a;1. 給此button設置新事件 click"createdefect"提交缺陷…

卡爾曼濾波的推導

卡爾曼濾波的推導1 最小二乘法在一個線性系統中&#xff0c;若\(x\)為常量&#xff0c;是我們要估計的量&#xff0c;關于\(x\)的觀測方程如下&#xff1a; \[ y Hx v \tag{1.1}\] \(H\)是觀測矩陣&#xff08;或者說算符&#xff09;&#xff0c;\(v\)是噪音&#xff0c;\(y…

Java注釋-保留

考慮一下Java批注&#xff1a; public interface AnAnnotaton {}帶有此注釋的類&#xff1a; AnAnnotaton class AnAnnotatedClass{}還有一個測試&#xff0c;檢查類中是否存在此批注&#xff1a; import static org.hamcrest.MatcherAssert.assertThat; import static org.h…

MYSQL查詢選修三門以上課程_SQL高級查詢的練習題

Student(S#,Sname,Sage,Ssex) 學生表Course(C#,Cname,T#) 課程表SC(S#,C#,score) 成績表Teacher(T#,Tname) 教師表問題&#xff1a;1、查詢“001”課程比“002”課程成績高的所有學生的學號&#xff1b;select a.S# from (select s#,score from SC where C#001) a,(select s#,s…

Determing client's IP

AuthorDeterming clients IPАнатоли&23.04.2009 18:39:46Registered userHow to determine clients IP address in THTTPServer.OnClientConnected, THTTPServer.OnClientDisonnected and TRtcFunction.OnExecute events?Danijel Tkalcec [RTC]23.04.2009 19:45:05…

mysql aa復制_MySQL的復制架構與優化

MySQL的復制架構與優化###########原理###########1.主服務器將更新的數據的sql語句(例如&#xff0c;insert&#xff0c;update&#xff0c;delete等)寫入到二進制文件中(由log-bin選項開啟)。此二進制文件由一個索引文件跟蹤維護。2.從服務器連接(使用I/O線程連接)主服務器&a…

如何安裝Gradle

Gradle是一個簡單而強大的構建工具。 它類似于Ant構建工具。 它可以很好地管理構建&#xff0c;還可以處理構建依賴性。 Gradle最好的部分是它是開源項目。 如果您正在考慮安裝并嘗試一下&#xff0c;那么您來對地方了。 Gradle的開發周期為4周&#xff0c;因此&#xff0c;每隔…

nmap使用指南

一、目標指定 1.CIDR標志位 192.168.1.0/24 2.指定范圍 192.168.1.1-255 192.168.1-255.1&#xff08;任意位置&#xff09;3.IPv6地址只能用規范的IPv6地址或主機名指定。 CIDR 和八位字節范圍不支持IPv6&#xff0c;因為它們對于IPv6幾乎沒什么用。 -iL <文件名> 主機名…

#Pragma Pack(n)與內存分配

#pragma pack(n) 解釋一&#xff1a; 每個特定平臺上的編譯器都有自己的默認“對齊系數”(也叫對齊模數)。程序員可以通過預編譯命令#pragma pack(n)&#xff0c;n1,2,4,8,16來改變這一系數&#xff0c;其中的n就是你要指定的“對齊系數”。 規則&#xff1a; 1、數據成員對齊規…