導航:首頁 > 編程語言 > javarest例子

javarest例子

發布時間:2024-07-15 18:02:06

❶ REST 請求處理

javax.ws.rs.ext.Providers 是JAX-RS 2.0定義的一種輔助介面,其實現類用於輔助REST框架完成過濾和讀寫攔截的功能,可以使用@Provider 註解標注這些類。Providers介面一共定義了四個方法,分別用來獲取MessageBodyReader,MessageBodyWriter,ExceptionMapper,ContextResolver

Jersey 之所以支持那麼多中響應實體的傳輸格式,是因為其底層實體Providers具備的對不同格式的處理能力。Jersey內部提供了豐富的MessageBodyReader和MessageBodyWriter 介面的實現類,用於處理不同格式的表述

如上圖,請求流程中存在三種角色,分別是:用戶,REST客戶端和REST伺服器,請求始於請求的發送,止於調用Resonse的readEntity()方法
(1).用戶請求提交數據,客戶端接收請求,進入第一個擴展點:客戶端請求過濾器 ClientRequestFilter 的filter()方法
(2).請求處理過濾完畢後,流程進入第二個擴展點:客戶端寫攔截器WriterInterceptor實現類的aroundWriterTo() 方法,實現對客戶端序列化操作的攔截
(3).客戶端消息體寫處理器MessageBodyWriter 執行序列化,流程從客戶端過渡到伺服器端
(4).伺服器接收請求,流程進入第三個擴展點:伺服器前置請求過濾器ContainerRequestFilter實現類 的filter()方法
(5).過濾器處理完畢後,伺服器根據請求匹配資源方法,如果匹配到相應的資源方法,流程進入第四個擴展點:伺服器後置請求過濾器ContainerRequestFilter 實現類 的filter() 方法
(6).後置請求過濾器處理完畢後,力促進入第五個擴展點:伺服器讀攔截器ReaderInterceptor實現類 的aroundReadFrom() 方法,攔截伺服器端反序列化操作
(7).伺服器消息體讀處理器MessageBodyReader 完成對客戶端數據流的反序列化,伺服器執行匹配的資源方法
(8).REST請求資源的處理完畢後,流程進入第六個擴展點:伺服器響應過濾器 ContainerResponseFilter 實現類 的filter() 方法
(9).過濾器處理完畢後,流程進入第七個擴展點:伺服器寫攔截器WriterInterceptor實現類 的aroundWriterTo() 方法,實現對伺服器端序列化到客戶端這個操作的攔截
(10).伺服器消息體寫處理器MessageBodyWriter 執行序列化,流程返回到客戶端一側
(11).客戶端接收響應,流程進入第八個擴展點:客戶端響應過濾器ClientResponseFilter 實現類 的filter() 方法
(12).過濾處理完畢後,客戶端響應實例response 返回到用戶一側,用戶執行response.readEntity(),流程進入第九個擴展點:客戶端攔截器ReaderInterceptor實現類 的aroundReadFrom() 方法,對客戶端反序列化進行攔截
(13).客服端消息體讀處理器MessageBodyReader 執行反序列化,將Java類型的對象最終作為readENtity()方法的返回值

JAX-RS-2.0定義的4種過濾器擴展點介面,供開發者實現其業務邏輯,按請求處理流程的先後順序為:客戶端請求過濾器(ClientRequestFilter) -------> 服務端請求過濾器(ContainerRequestFilter)-------->服務端響應過濾器(ContainerResponseFilter)——>客戶端響應過濾器(ClientResponseFilter)

ClientRequestFilter

ClientResponseFilter

ContainerRequestFilter

ContainerResponseFilter

Jersey 內部實現了幾個典型應用的攔截器,他們是成對出現的
ReaderInterceptor

WriterInterceptor

編碼解碼攔截器(ContentEncoder)

優先順序的定義使用註解 @Priority ,優先順序的值是一個整數值,對於ContainerReauest,PreMatchContainerRequest,ClientRequest 和讀寫攔截器 採用升序策略,數值越小,優先順序越高;對於ContainerResponse和ClientResponse採用降序策略,數值越大,優先順序越高

❷ 設有各不同面值人民幣若干,編寫一個java程序,對任意輸入的一個金額,給出能組合出這個值的最佳可能

public class Money {

public static void main(String[] args) {
// 所有金額以分為單位
int money = 146;

// 所有鈔票面以分為單位,從大到小排列,10000是100塊,20是2角
int[] rmbs = { 10000, 5000, 2000, 1000, 500, 100, 50, 20, 10, 5, 2, 1 };

// rest是剩餘的錢,剛開始為所求的錢,隨便選錢rest越變越小,直到為0
int rest = money;
for (int rmb : rmbs) {
// num為鈔票個數
int num = rest / rmb;
if (num > 0) {
rest = rest - rmb * num;

System.out.println("鈔票面額(分):" + rmb + " 個數:" + num + " 還差多少錢(分):" + rest);

// 錢湊齊了,程序結束
if (rest == 0) {
System.exit(1);
}
} // end if num
} // end for rmb
}

}

❸ java容器有哪些 restlet

一、基於spring配置的Rest簡單服務
1、新建RestSpringApplication Web工程。

將restlet和spring的jar包復制進來。紅色部分為新加入進來的jar包。

將上篇中的RestApplication工程項目中的src的源文件復制過來。
2、將web.xml加入下面代碼
<servlet>
<servlet-name>restlet</servlet-name>
<servlet-class>
org.restlet.ext.spring.RestletFrameworkServlet
</servlet-class>
<init-param>
<param-name>org.restlet.component</param-name>
<param-value>restletComponent</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>restlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
上面代碼指定了restlet使用spring的RestletFrameworkServlet。
3、建立restlet-servlet.xml文件,只需要配置org.restlet.ext.spring.SpringRouter,及對應的路徑和資源文件。
<bean name="root">
<property name="attachments">
<map>
<entry key="/student/{studentId}">
<bean>
<lookup-method name="create" bean="StudentResource" />
</bean>
</entry>
<entry key="/student">
<bean>
<lookup-method name="create" bean="StudentsResource" />
</bean>
</entry>
</map>
</property>
</bean>
<bean id="StudentResource" class="org.lifeba.ws.resource.StudentResource" scope="prototype"/>
<bean id="StudentsResource" class="org.lifeba.ws.resource.StudentsResource" scope="prototype"/>
上面的代碼配置了 /student/{studentId}對應StudentResource,以及student對應StudentsResource資源類。通過SpringRouter可以非常方便的通過attachments配置資源路徑。如果你有更多的路徑,你可以建立多個entry即可。
4、好了,你現在可以重啟tomcat了,輸入 http://localhost:8085/RestSpringApplication/student/1 ,訪問正常。

二、測試添加、刪除、更新方法。
1、student_post方法,添加一個Student,成功後返回新建studentId為2的對象。
public void student_post(){
try {
Form queryForm = new Form();
queryForm.add("name","steven_spring");
queryForm.add("clsId","201002");
queryForm.add("sex","2");
queryForm.add("age","12");
ClientResource client = new ClientResource("http://localhost:8085/RestSpringApplication/student");
Representation representation =client.post(queryForm.getWebRepresentation());
System.out.println(representation.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
訪問http://localhost:8085/RestSpringApplication/student/2

訪問http://localhost:8085/RestSpringApplication/student ,可以看到有2個Student對象。

2、student_delete方法,刪除Id為1的Student,成功執行後返回1。
public void student_delete(){
try {
ClientResource client = new ClientResource("http://localhost:8085/RestSpringApplication/student/1");
Representation representation =client.delete();
System.out.println(representation.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
再次訪問http://localhost:8085/RestSpringApplication/student,可以看到只有一個Id為2的Student對象。

3、student_put方法,更新Id為2的Student。
public void student_put(){
try {
Form queryForm = new Form();
queryForm.add("name","steven_spring_modify");
queryForm.add("clsId","201012");
queryForm.add("sex","12");
queryForm.add("age","24");
ClientResource client = new ClientResource("http://localhost:8085/RestSpringApplication/student/2");
Representation representation =client.put(queryForm);
System.out.println(representation.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
訪問http://localhost:8085/RestSpringApplication/student/2

通過上面的代碼已經完全實現了Spring中的restlet的配置。上面只對Student對象做了介紹,你也可以實現對Course在spring中配置,基本方法一樣。這里不再闡述。

❹ 濡備綍浣跨敤Java嫻嬭瘯IBM Systems Director鐨凴EST API

1.鎵嬪姩錛堜嬌鐢ㄥ伐鍏鳳級錛氫嬌鐢ㄤ竴浜涘栭儴 REST 瀹㈡埛絝錛屽 Firefox Poster銆乭ttp4e 絳夛紝騫舵墜鍔ㄨ皟鐢 REST API銆傛垜浠鍦ㄦ湰鏁欑▼涓浣跨敤浜 Poster銆傛偍鍙浠ヤ嬌鐢ㄨ嚜宸卞枩嬈㈢殑 REST 瀹㈡埛絝銆

2.鑷鍔錛氫嬌鐢ㄧ紪紼嬭璦鎴栬剼鏈鑷鍔ㄨ皟鐢 REST API銆傛湰鏁欑▼灝嗕粙緇嶄嬌鐢 Java 榪涜岃嚜鍔ㄦ祴璇曘傛偍鍙浠ヤ嬌鐢ㄨ嚜宸卞枩嬈㈢殑浠諱綍鍏朵粬璇璦鎴栬剼鏈銆

榪欎袱涓鏂規硶鐨勮存槑濡備笅錛


1.鎵嬪姩錛堜嬌鐢 Poster錛夛細

鍦ㄦ湰鑺備腑錛屾垜浠灝嗚ㄨ轟嬌鐢 Poster 鎵嬪姩嫻嬭瘯涓浜 IBM Systems Director 鐨勫熀鏈鍔熻兘錛


1.鑾峰緱璧勬簮鍒楄〃錛圙ET 鎿嶄綔錛

2.鍙戠幇鏂拌祫婧 錛圥OST 鎿嶄綔錛

3.淇鏀瑰凡鍙戠幇鐨勮祫婧愶紙PUT 鎿嶄綔錛

4.鍒犻櫎璧勬簮錛圖ELETE 鎿嶄綔錛

1.鑾峰緱璧勬簮鍒楄〃錛圙ET 鎿嶄綔錛夛細

濡傚浘 1 鎵紺猴紝鎮ㄤ嬌鐢 GET 鎿嶄綔鍙浠ュ垪鍑鴻祫婧愩侴ET 媯緔㈡湁鍏寵ヨ祫婧愮殑淇℃伅銆傛緔㈣祫婧愮殑璇鋒眰濡傚浘 1 鎵紺猴細

❺ 如何實現支持REST的Java Business Services

下圖顯示了示例實現中的類。藍色所示的類是框架外部的類,將它們放在這里是為了展示與框架的結構關系。



轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦

❻ java 如何模擬瀏覽器調用rest api介面

packagecom.demo;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;

importjavax.xml.bind.DatatypeConverter;

importorg.apache.http.HttpResponse;
importorg.apache.http.client.methods.HttpGet;
importorg.apache.http.impl.client.DefaultHttpClient;
publicclassrestTest{
publicstaticvoidmain(String[]args){
try{
DefaultHttpClientClient=newDefaultHttpClient();

HttpGethttpGet=newHttpGet("你的地址");
Stringencoding=DatatypeConverter.printBase64Binary("admin:admin".getBytes("UTF-8"));

httpGet.setHeader("Authorization","Basic"+encoding);

HttpResponseresponse=Client.execute(httpGet);

System.out.println("response="+response);

BufferedReaderbreader=newBufferedReader(newInputStreamReader(response.getEntity().getContent()));
StringBuilderresponseString=newStringBuilder();
Stringline="";
while((line=breader.readLine())!=null){
responseString.append(line);
}
breader.close();
StringrepsonseStr=responseString.toString();

System.out.println("repsonseStr="+repsonseStr);

}catch(IOExceptione){
e.printStackTrace();
}

}
}

閱讀全文

與javarest例子相關的資料

熱點內容
平時用什麼app看nba 瀏覽:503
win10想以管理員身份運行bat文件 瀏覽:85
合並單元格中的其他數據如何排序 瀏覽:331
電腦窗口程序在哪 瀏覽:281
前女友把我微信刪了又加什麼意思 瀏覽:655
win10不識別無線xboxone手柄 瀏覽:403
汽車之家app怎麼看成交價 瀏覽:908
abc文件破解密碼 瀏覽:516
怎麼登錄米家app賬號 瀏覽:165
兆歐表多少轉讀數據 瀏覽:414
多媒體網路通訊 瀏覽:747
文件上的表填不了內容該怎麼辦 瀏覽:899
弟弟迷上網路小說怎麼辦 瀏覽:766
網路上有人想訪問我的地址怎麼辦 瀏覽:730
linux解壓zip亂碼 瀏覽:839
看直播數據用哪個平台最好 瀏覽:730
win10晶元驅動程序版本 瀏覽:763
如何給word添加公式編輯器 瀏覽:666
iphone桌面文件夾怎樣合並 瀏覽:919
要我蘋果賬號密碼忘記了怎麼辦 瀏覽:578

友情鏈接