日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 综合久久亚洲 | 男性裸体全身精光gay | 欧美狂猛xxxxx乱大交3 | 无码国产色欲xxxx视频 | 欧美成人日韩 | 97se在线| 久久亚洲高清 | 毛片在线视频观看 | 青娱乐在线免费观看 | 成人免费视频一区二区三区 | 狠狠干少妇 | 精品国产18久久久久久二百 | 亚洲欧洲精品在线 | av成人在线看| 韩国一区二区三区四区 | 女生下面流水视频 | 美女张开双腿让男人捅 | 色激情网 | 亚洲欧美激情视频 | 中文永久免费观看 | 2020国产精品视频 | 午夜精品免费 | 亚洲老女人 | 中文字幕av在线免费观看 | 久久网站免费看 | 婷婷综合在线 | 最新中文av | 欧美日韩国产在线观看 | 成人综合一区二区 | 青草视频在线 | 少妇2做爰hd韩国电影 | 波多野结衣精品视频 | 一本一道久久综合狠狠老精东影业 | 97久久人国产精品婷婷 | 成年人免费黄色 | 国产精品免费看久久久无码 | 欧美久久一区 | 蝌蚪久久 | avtt在线观看 | 国产精品国语 | 日本成人一级片 | 亚洲乱码电影 | 91视频综合 | 亚洲综合小说 | 中国老熟女重囗味hdxx | 欧美日韩首页 | 亚洲午夜无码av毛片久久 | 欧美亚洲精品在线 | 国产3p视频 | 日韩青青草 | 伊人久久中文字幕 | 天堂亚洲 | 亚洲高清视频一区 | 成人av资源在线 | 欧美激情在线观看一区 | 国产夫妻视频 | 国产精品久久久久久久av福利 | 97自拍网 | 色屁屁ts人妖系列二区 | 国产午夜一区 | 欧美高清一区 | 国产乱淫精品一区二区三区毛片 | 欧美高潮视频 | 亚洲黄色免费看 | av电影一区二区 | 日韩免费播放 | 动漫女被黄漫免费视频 | 瑟瑟视频在线看 | 成人视频在线观看 | 黄色一几片 | 日本一区二区三区精品 | 久久久久久久久影院 | 精品少妇人妻av一区二区 | 欧美99| 免费在线不卡视频 | 福利在线一区 | 国产日韩网站 | 狠狠躁18三区二区一区视频 | 黄色a级片 | 成人看片网 | 中文在线а√天堂官网 | 色狠狠av | 精品无码人妻一区二区三 | 在线精品自拍 | 日韩高清成人 | 亚洲777| 国产美女在线免费 | 天天操夜操 | 精品无码av一区二区三区不卡 | 韩国jizz| 日本老小玩hd老少配 | 一色道久久88加勒比一 | 国产做爰全免费的视频软件 | 啪啪天堂| 免费观看美女裸体网站 | 日韩免费观看一区二区三区 | 国产成人在线一区二区 | 性欧美视频 | 熟女俱乐部一区二区 |