❶ 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();
}
}
}