REST與Apache Camel

在Camel中公開HTTP終結點的方法有很多:jetty,tomcat,servlet,cxfrs和restlet。 其中的兩個組件– cxfrs和restlet也只需幾行代碼即可支持REST語義。 這個簡單的示例演示了如何使用camel-restlet和camel-jdbc進行CRUD操作。 四個HTTP動詞執行不同的操作,并映射到以下單個URI模板:

  • POST –創建一個新用戶: / user
  • GET –請求URI指定的用戶的當前狀態: / user / {userId}
  • PUT –使用新信息更新給定URI上的用戶/ user / {userId}
  • 刪除–刪除由給定URI標識的用戶: / user / {userId}


還有一個/ users URI,它返回所有用戶,無論使用哪種HTTP方法。 用Camel創建這樣的應用程序很簡單。 添加所有必要的依賴項(restlet,spring,jdbc…)后,配置web.xml來加載Camel上下文:

<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:camel-config.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

并映射Restlet servlet

<servlet><servlet-name>RestletServlet</servlet-name><servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class><init-param><param-name>org.restlet.component</param-name><param-value>RestletComponent</param-value></init-param>
</servlet>
<servlet-mapping><servlet-name>RestletServlet</servlet-name><url-pattern>/rs/*</url-pattern>
</servlet-mapping>

在Spring上下文中,還有更多的Restlet和一個內存中的數據源設置代碼:

<bean id="RestletComponent" class="org.restlet.Component"/><bean id="RestletComponentService" class="org.apache.camel.component.restlet.RestletComponent"><constructor-arg index="0"><ref bean="RestletComponent"/></constructor-arg></bean><jdbc:embedded-database id="dataSource" type="HSQL"><jdbc:script location="classpath:sql/init.sql"/></jdbc:embedded-database>

完成所有設置后,下一步是創建將處理HTTP請求并執行適當的CRUD操作的駱駝路由。 第一個是createUser路由,該路由僅使用POST請求中的參數執行SQL插入命令,并在響應正文中返回新創建的用戶:

<route id="createUser"><from uri="restlet:/user?restletMethod=POST"/><setBody><simple>insert into user(firstName, lastName) values('${header.firstName}','${header.lastName}');  </simple></setBody><to uri="jdbc:dataSource"/><setBody><simple>select * from user ORDER BY id desc LIMIT 1</simple></setBody><to uri="jdbc:dataSource"/>
</route>

“ manipulateUser”路由處理GET,PUT和DELETE HTTP方法,但是根據使用的方法,它執行不同的SQL命令:

<route id="manipulateUser"><from uri="restlet:/user/{userId}?restletMethods=GET,PUT,DELETE"/><choice><when><simple>${header.CamelHttpMethod} == 'GET'</simple><setBody><simple>select * from user where id = ${header.userId}</simple></setBody></when><when><simple>${header.CamelHttpMethod} == 'PUT'</simple><setBody><simple>update user set firstName='${header.firstName}', lastName='${header.lastName}' where id = ${header.userId}</simple></setBody></when><when><simple>${header.CamelHttpMethod} == 'DELETE'</simple><setBody><simple>delete from user where id = ${header.userId}</simple></setBody></when><otherwise><stop/></otherwise></choice><to uri="jdbc:dataSource"/>
</route>

列出所有用戶的最后一條路線是不言而喻的:

<route id="listUsers"><from uri="restlet:/users"/><setBody><constant>select * from user</constant></setBody><to uri="jdbc:dataSource"/>
</route>

如果您想查看應用程序的運行情況,請從github獲取源代碼,并通過鍵入以下命令使用嵌入式maven-jetty插件運行它如果已安裝curl,甚至可以嘗試一些快速查詢:

要創建用戶,請使用firstName和lastName參數發出http POST請求

curl -d 'firstName=test&lastName=user' http://localhost:8080/rs/user/

要更新現有用戶,請使用firstName和lastName參數發出http PUT請求

curl -X PUT -d 'firstName=updated&lastName=user' http://localhost:8080/rs/user/2

要檢索現有用戶,請發出帶有userId作為URL一部分的http GET請求

curl -X GET http://localhost:8080/rs/user/2

要刪除現有用戶,請發出http DELETE請求,并將userId作為URL的一部分

curl -X DELETE http://localhost:8080/rs/user/2

要檢索所有現有用戶,請向用戶url發出http GET請求

curl -X GET http://localhost:8080/rs/users

參考:來自OFBIZian博客的JCG合作伙伴 Bilgin Ibryam提供的REST with Apache Camel 。

翻譯自: https://www.javacodegeeks.com/2013/03/rest-with-apache-camel.html

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

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

相關文章

百米路由器2登陸地址_騰達無線路由器怎么安裝,真的不錯

騰達無線路由器怎么安裝1、WAN口連接寬帶進線(即網絡公司進來的線或貓出來的線&#xff0c;一般顏色不一樣)、LAN口連接局域網內的電腦。2、設置所連接電腦的IP地址。右鍵點擊網上鄰居屬性3、右鍵點擊本地連接屬性4、選擇Internet協議TCP/IP屬性5、點擊選擇自動獲得IP地址和自動…

input點擊鏈接另一個頁面,各種操作。

1.鏈接到某頁<input type"button" name"Submit" value"確 定" class"btn" οnclick"location.hreffilename.html" />2.返回(等同后退)<input name"Submit2" type"button" class"btn"…

80. Remove Duplicates from Sorted Array II

題目描述 Follow up for “Remove Duplicates”: What if duplicates are allowed at most twice? For example, Given sorted array nums [1,1,1,2,2,3], Your function should return length 5, with the first five elements of nums being 1, 1, 2, 2 and 3. It doesn…

JavaFX 2 XYCharts和Java 7功能

我最喜歡的JavaFX 2功能之一是它在javafx.scene.chart包中提供的標準圖表。 該軟件包提供了幾種不同類型的現成圖表。 除了其中之一&#xff08; PieChart &#xff09;以外&#xff0c;所有其他都是“ 2軸圖”&#xff08; XYChart的特定實現&#xff09;。 在本文中&#xff…

前端基礎-HTML的的標簽詳解

閱讀目錄 一、head內常用標簽二、 HTML語義化三、 字符實體四、 h系列標簽五、 p標簽六、 img標簽七、 a標簽八、 列表標簽九、 table標簽十、 form標簽 一、 head內常用標簽 1、meta相關 #1、指定字符集<meta charset"gbk">#2、頁面描述<meta name"…

new失敗跟蹤函數_WinDbg預覽時間線:調試器中的時間線可以允許用戶記錄跟蹤

時間旅行調試(TTD)允許用戶記錄跟蹤&#xff0c;這些跟蹤是對程序執行的記錄。時間線是執行過程中發生的事件的直觀表示&#xff0c;這些事件可以是包括斷點&#xff0c;內存讀/寫&#xff0c;函數調用和返回以及異常。使用時間線窗口可以快速查看重要事件&#xff0c;了解相對…

linux 進程的執行時間,Linux 獲取進程執行時間

Linux 獲取進程執行時間1 前言測試一個程序的執行時間, 時間包括用戶 CPU 時間系統 CPU 時間時鐘時間之前獲取之前時間都是在程序的 main 函數用 time 函數實現, 這個只能粗略的計算程序的執行時間, 不能準確的獲取其他時間在看 APUE 時, 書中有關程序時間測試程序, 非常正規, …

Java環境變量的設置

1.計算機->屬性->高級系統設置->環境變量 2.設置JAVA_HOME和path&#xff0c;1.5之后的JDK可以不設置classpath 3.JAVA_HOME的路徑是JDK的安裝路徑 4.在系統變量里面找到path&#xff0c;然后點擊修改&#xff0c;在最后面添加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 5…

merge

merge語句具有按條件獲取要更新或插入到表中的數據行&#xff0c;然后從1個或多個源頭對表進行更新或向表中插入行兩方面的能力。經常用在數據倉庫中移動大量數據。 語法: merge<hint> into<table_name> using<table_view_or_query> on<condition> whe…

可以優化同步嗎?

總覽 有一個常見的誤解&#xff0c;因為JIT很智能&#xff0c;并且可以消除對象的同步&#xff0c;而該對象僅存在于不影響性能的方法中。 比較StringBuffer和StringBuilder的測試 這兩個類基本上做相同的事情&#xff0c;除了一個是同步的&#xff08;StringBuffer&#xff0…

perl exe執行提示缺少文件解決方法

在項目開發中&#xff0c;使用perl語言編譯的exe可執行文件;在項目中使用了XML::LibXML模塊&#xff1b;發現exe在本機電腦執行正常&#xff0c;但在其他同事執行時卻提示缺少libxml2-2.dll等文件。 問題現象&#xff1a; 無法啟動此程序&#xff0c;因為計算機中丟失libxml2-2…

華為搶購助手_華為榮耀20系列手機采用的五項新科技,科普簡介

5月底榮耀20系列在上海發布&#xff0c;榮耀20系列旗艦手機擁有五項榮耀自主研發的新科技&#xff0c;包括LinkTurbo網絡聚合加速、超級NFC、方舟編譯器、人性化YOYO智慧生命體&#xff0c;超級藍牙。下面分別介紹一下這五項新科技。LinkTurbo網絡聚合加速先來科普一下LinkTurb…

Flex彈性布局

1 Flex: 彈性布局 (轉) 任何一個容器都可以指定為 Flex 布局。 1 .box {2  display: flex;3 } 行內元素也可以使用 Flex 布局。 1 .box{2 display: inline-flex;3 } 注意&#xff0c;設為 Flex 布局以后&#xff0c;子元素的 float、 clear 和 vertical-align 屬性將失效…

洛谷P3045 [USACO12FEB]牛券Cow Coupons

P3045 [USACO12FEB]牛券Cow Coupons 71通過248提交題目提供者洛谷OnlineJudge標簽USACO2012云端難度提高/省選-時空限制1s / 128MB提交 討論 題解 最新討論更多討論 86分求救題目描述 Farmer John needs new cows! There are N cows for sale (1 < N < 50,000), and …

python數據挖掘電影評分分析_Pyhon數據分析項目——男女電影評分差異比較

《用Python玩轉數據》數據分析項目一、程序功能基于MovieLens100k數據集中男性女性對電影的評分來判斷男性還是女性電影評分的差異性更大。二、數據來源數據集下載&#xff1a;http://files.grouplens.org/datasets/movielens/ml-100k.zip數據含義&#xff1a;u.data表示100k條…

發掘Apache Camel的力量

最近幾年&#xff0c;ESB軟件越來越受歡迎。 如果大多數人通常知道什么是ESB&#xff0c;那么他們很少會清楚地了解這種體系結構的不同組件的確切作用。 例如&#xff0c;Apache ServiceMix由三個主要組件組成&#xff1a;Apache Karaf&#xff08;OSGI容器&#xff09;&#…

unix/linux系統中文件分為哪些類型?,到底該如何理解 Unix/Linux 的文件系統?看這篇就知道了...

原標題&#xff1a;到底該如何理解 Unix/Linux 的文件系統&#xff1f;看這篇就知道了作者&#xff1a;舠

【Luogu】P1131時態同步(樹形DP)

題目鏈接 甚矣吾衰也&#xff01;這么簡單的DP我都不會了 太恐怖了 樹形DP&#xff0c;從子樹里選出時間最長的來&#xff0c;剩下的調到這個最長時間即可。 #include<cstdio> #include<cctype> #include<algorithm> #include<cstring>using std::max;…

HTML小記

1、頁面內跳轉 當<a>元素用于頁面內的錨點跳轉時&#xff0c;應該先為該頁面設置一些錨點&#xff0c;而定義錨點有兩種辦法&#xff1a; 通過<a>元素的name屬性來定義&#xff0c;如&#xff1a;<a name"anchor-name">name屬性的值就是錨點的名…

python3連接數據庫失敗_python3使用pymysql連接mysql數據庫報Keyerror

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓不好意思Traceback (most recent call last):File "d:\Python\practice2\mydbconn.py", line 5, in conn pymysql.connect(usertestuser, passwdtestpasswd,host192.168.1.3, dbtest,charsetutf8)File "C:\Users\t…