日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用RESTful客户端API进行GET / POST

發(fā)布時(shí)間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用RESTful客户端API进行GET / POST 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

互聯(lián)網(wǎng)上有很多如何使用RESTful Client API的東西。 這些是基礎(chǔ)。 但是,盡管該主題看起來微不足道,但仍然存在一些障礙,尤其是對于初學(xué)者而言。
在這篇文章中,我將嘗試總結(jié)我的專業(yè)知識,以及我如何在實(shí)際項(xiàng)目中做到這一點(diǎn)。 我通常使用Jersey(用于構(gòu)建RESTful服務(wù)的參考實(shí)現(xiàn))。 參見例如我的另一篇文章 。 在本文中,我將從JSF bean調(diào)用真正的遠(yuǎn)程服務(wù)。 讓我們編寫一個(gè)會(huì)話范圍的bean RestClient。

package com.cc.metadata.jsf.controller.common;import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource;import java.io.Serializable; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.context.FacesContext;/*** This class encapsulates some basic REST client API.*/ @ManagedBean @SessionScoped public class RestClient implements Serializable {private transient Client client;public String SERVICE_BASE_URI;@PostConstructprotected void initialize() {FacesContext fc = FacesContext.getCurrentInstance();SERVICE_BASE_URI = fc.getExternalContext().getInitParameter('metadata.serviceBaseURI');client = Client.create();}public WebResource getWebResource(String relativeUrl) {if (client == null) {initialize();}return client.resource(SERVICE_BASE_URI + relativeUrl);}public ClientResponse clientGetResponse(String relativeUrl) {WebResource webResource = client.resource(SERVICE_BASE_URI + relativeUrl);return webResource.accept('application/json').get(ClientResponse.class);} }

在此類中,我們獲得了在web.xml中指定(配置)的服務(wù)基礎(chǔ)URI。

<context-param><param-name>metadata.serviceBaseURI</param-name><param-value>http://somehost/metadata/</param-value> </context-param>

此外,我們編寫了兩種方法來接收遠(yuǎn)程資源。 我們打算接收J(rèn)SON格式的資源,并將其轉(zhuǎn)換為Java對象。 下一個(gè)bean演示了如何對GET請求執(zhí)行此任務(wù)。 Bean HistoryBean通過使用GsonConverter將接收到的JSON轉(zhuǎn)換為Document對象。 最后兩節(jié)將不在此處顯示(沒關(guān)系)。 Document是一個(gè)簡單的POJO,而GsonConverter是一個(gè)包裝Gson的單例實(shí)例。

package com.cc.metadata.jsf.controller.history;import com.cc.metadata.jsf.controller.common.RestClient; import com.cc.metadata.jsf.util.GsonConverter; import com.cc.metadata.model.Document;import com.sun.jersey.api.client.ClientResponse;import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.ViewScoped;/*** Bean getting history of the last extracted documents.*/ @ManagedBean @ViewScoped public class HistoryBean implements Serializable {@ManagedProperty(value = '#{restClient}')private RestClient restClient;private List<Document> documents;private String jsonHistory;public List<Document> getDocuments() {if (documents != null) {return documents;}ClientResponse response = restClient.clientGetResponse('history');if (response.getStatus() != 200) {throw new RuntimeException('Failed service call: HTTP error code : ' + response.getStatus());}// get history as JSONjsonHistory = response.getEntity(String.class);// convert to Java array / list of Document instancesDocument[] docs = GsonConverter.getGson().fromJson(jsonHistory, Document[].class);documents = Arrays.asList(docs);return documents;}// getter / setter... }

下一個(gè)bean演示了如何通過POST與遠(yuǎn)程服務(wù)進(jìn)行通信。 我們打算發(fā)送上傳文件的內(nèi)容。 我使用PrimeFaces的 FileUpload組件,以便可以從偵聽器的參數(shù)FileUploadEvent中提取內(nèi)容作為InputStream。 這在這里并不重要,您還可以使用任何其他Web框架來獲取文件內(nèi)容(也可以作為字節(jié)數(shù)組)。 更重要的是,看看如何處理RESTful Client類FormDataMultiPart和FormDataBodyPart。

package com.cc.metadata.jsf.controller.extract;import com.cc.metadata.jsf.controller.common.RestClient; import com.cc.metadata.jsf.util.GsonConverter; import com.cc.metadata.model.Document;import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.core.header.FormDataContentDisposition; import com.sun.jersey.multipart.FormDataBodyPart; import com.sun.jersey.multipart.FormDataMultiPart;import org.primefaces.event.FileUploadEvent;import java.io.IOException; import java.io.Serializable; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext;import javax.ws.rs.core.MediaType;/*** Bean for extracting document properties (metadata).*/ @ManagedBean @ViewScoped public class ExtractBean implements Serializable {@ManagedProperty(value = '#{restClient}')private RestClient restClient;private String path;public void handleFileUpload(FileUploadEvent event) throws IOException {String fileName = event.getFile().getFileName();FormDataMultiPart fdmp = new FormDataMultiPart();FormDataBodyPart fdbp = new FormDataBodyPart(FormDataContentDisposition.name('file').fileName(fileName).build(),event.getFile().getInputstream(), MediaType.APPLICATION_OCTET_STREAM_TYPE);fdmp.bodyPart(fdbp);WebResource resource = restClient.getWebResource('extract');ClientResponse response = resource.accept('application/json').type(MediaType.MULTIPART_FORM_DATA).post(ClientResponse.class, fdmp);if (response.getStatus() != 200) {throw new RuntimeException('Failed service call: HTTP error code : ' + response.getStatus());}// get extracted document as JSONString jsonExtract = response.getEntity(String.class);// convert to Document instanceDocument doc = GsonConverter.getGson().fromJson(jsonExtract, Document.class);...}// getter / setter... }

最后但并非最不重要的一點(diǎn),我想演示如何使用任何查詢字符串(URL參數(shù))發(fā)送GET請求。 下一個(gè)方法通過看起來像http:// somehost / metadata / extract?file = <some file path>的URL詢問遠(yuǎn)程服務(wù)。

public void extractFile() {WebResource resource = restClient.getWebResource('extract');ClientResponse response = resource.queryParam('file', path).accept('application/json').get(ClientResponse.class);if (response.getStatus() != 200) {throw new RuntimeException('Failed service call: HTTP error code : ' + response.getStatus());}// get extracted document as JSONString jsonExtract = response.getEntity(String.class);// convert to Document instanceDocument doc = GsonConverter.getGson().fromJson(jsonExtract, Document.class);... }

參考:在我們的軟件開發(fā)博客上,來自我們JCG合作伙伴 Oleg Varaksin的RESTful Client API進(jìn)行GET / POST 。

翻譯自: https://www.javacodegeeks.com/2013/01/get-post-with-restful-client-api.html

總結(jié)

以上是生活随笔為你收集整理的使用RESTful客户端API进行GET / POST的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲成人二区 | 国产视频在线观看视频 | 自拍偷拍欧美亚洲 | 毛片www| 欧美大片aaa| 欧洲精品久久一区二区 | 久久超碰av| 亚洲8888| 国产乱码精品一区二区三区中文 | 久久久久人妻一区精品色欧美 | 自拍偷拍第一页 | 亚洲综合大片69999 | 国产黄色网 | 一级性生活毛片 | 五月天激情丁香 | 国产日韩精品中文字无码 | 封神榜二在线高清免费观看 | 挪威xxxx性hd极品 | 欧美jizz欧美性大全 | 国产日韩欧美二区 | 成人午夜激情网 | 成人午夜淫片免费观看 | 亚洲欧美日韩不卡 | 欧美日韩1区2区3区 亚洲日本精品视频 | 日韩中文字幕在线播放 | 久久成人人人人精品欧 | 成人啪啪网站 | 亚洲码在线观看 | 综合狠狠开心 | 日日摸天天爽天天爽视频 | 久久aaa | 国产日韩精品一区 | 四虎影视免费永久观看在线 | aa视频在线观看 | 91琪琪| 中文字幕无线码一区 | 国产一区毛片 | 91麻豆映画传媒 | 91视频啊啊啊 | 亚洲激情视频网站 | 久久精品国产99精品国产亚洲性色 | 日韩欧美在线不卡 | 性高跟鞋xxxxhd国产电影 | 天天操你| 天天爽网站 | re久久| 少妇高潮一区二区三区在线 | 国产精品yy| 国产经典一区二区 | 日韩欧美四区 | 啪在线视频 | 色哟哟一区二区三区四区 | 亚洲天堂av在线免费观看 | 精品国产视频在线 | 久久久久99精品成人片直播 | 国产美女喷水视频 | 免费的黄色片 | 一区二区三区四区人妻 | 久久综合伊人 | 丝袜美腿亚洲综合 | 韩国三级视频在线观看 | 中文字幕亚洲一区二区三区 | 精品国产中文字幕 | 亚洲精品一区二区三区在线 | www..com黄色 | 欧洲视频在线观看 | 一区二区三区波多野结衣 | 日日干夜夜干 | 嫩草影院一区二区 | 手机av电影在线 | 香蕉久久久久久久av网站 | 特级特黄刘亦菲aaa级 | 精品无人区无码乱码毛片国产 | 国产精品久久久久久亚洲影视 | 午夜精品一区二区三区在线播放 | 亚欧在线 | 乌克兰性极品xxxhd | 岳乳丰满一区二区三区 | 在线观看成人一区 | 99热这里只有精品9 日韩综合在线 | 午夜在线视频免费 | 超碰com | 成人免费无码大片a毛片 | 夜夜se| 成年人在线视频网站 | 精品少妇av | 久久久久无码国产精品不卡 | 亚洲精品乱码久久久久久久久久久久 | 韩国三级hd中文字幕叫床浴室 | 亚洲国产精品久久精品怡红院 | 亚洲欧洲日本一区二区三区 | 末发成年娇小性xxxxx | 久草国产在线视频 | 经典三级视频 | 69xxxx国产 | 欧美一级免费观看 | 精品少妇一区二区 | 国产精品资源网站 | 欧美国产一区二区 |