在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

REST与Apache Camel相关推荐

  1. Apache Camel 2.15.0 发布,Java 规则引擎

    Apache Camel 2.15.0 发布啦!!!该版本经过 6 个月开发,修复了超过 500 个 bug.但最值得关注的是给我们带来的新特性: 自文档 目录组件 Camel 工具类目录 重用 Ca ...

  2. Apache Camel框架入门示例

    2019独角兽企业重金招聘Python工程师标准>>> Apache Camel是Apache基金会下的一个开源项目,它是一个基于规则路由和中介引擎,提供企业集成模式的Java对象的 ...

  3. 关于apache camel的消息转发效率

    公司使用activemq和camel做消息的分发,之前数据量不是很大,所以一直没怎么考虑效率问题,对camel的工作原理研究也不深.单是最近随着业务量的增加,camel的效率逐渐成了瓶颈,所以根据日志 ...

  4. apache camel 的 split 和 aggregate

    2019独角兽企业重金招聘Python工程师标准>>> split和aggregate,看图就明白了. 下面我用一个例子来说明,非常难得,你很难在网上找到apache camel这样 ...

  5. java camel dsl,Apache Camel与Spring DSL

    我正在尝试使用spring DSL在Apache Camel中运行一个简单的应用程序 . 这是我的spring-config.xml 这是我的Java类测试: public class CamelSp ...

  6. Apache Camel简介与入门

    Apache Camel 是一个基于知名的企业应用模式(Enterprise Integration Patterns)多功能的整合框架. StackOverflow上有很多学习Apache Came ...

  7. Apache Camel:基于企业集成模式(EIP)的开源集成框架

    本资源由 伯乐在线 - 唐尤华 整理 Apache Camel 是一个功能强大的开源集成框架,基于企业集成模式(EIP)提供了强大的Bean集成功能. 介绍 通过Camel可以用企业集成模式创建路由和 ...

  8. 简化软件集成:一个Apache Camel教程

    本文来自于阮一峰,文章主要讲解了构建的流程,每个步骤介绍的较为详细,希望对大家有帮助. 软件很少(如果有的话)存在于信息真空中.至少,这是我们软件工程师可以为我们开发的大多数应用程序做出的假设. 在任 ...

  9. Apache Camel框架之事务控制

    http://blog.csdn.net/kkdelta/article/details/7249122 本文简单介绍一下Apache Camel如何对route进行事务控制,首先介绍整个route只 ...

  10. Apache Camel Test Framework(MOCK)

    http://jnn.iteye.com/blog/1327693 先说点题外话 :上周五我和几个朋友交流的时候我发现大家很少写测试,分析原因一个可能是大家认为程序还不复杂,我写测试的回报不高,还有一 ...

最新文章

  1. 爬虫之JS的解析确定js的位置
  2. 来字节才发现,31岁程序员已经是大团队里最老的了!才发现自己从未真的努力,虽然每天加班到十二点,但只怀着赶紧干完的抱怨!...
  3. textread函数_matlab基础textread函数实例
  4. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的连接恢复和命令拦截...
  5. python的logging模块
  6. Cold-Staking | TPoS vs LPoS vs DPoS
  7. Icomparer和Icomparable集合排序
  8. Centos中常见error(网卡、网络、防火墙)
  9. 虚拟机的网络连接模式
  10. Kubernetes 和 Docker,到底什么关系?
  11. ios 图片居中裁剪_iOS实现图片的缩放和居中显示
  12. [补档]noip2019集训测试赛(十三)
  13. 各类文件的文件头标志
  14. C# 多线程BackgroundWorker
  15. Vue进阶(六十三):如何使浏览器打开时,默认的文档模式就是标准模式
  16. QQ小游戏接入问题:Uncaught TypeError: wx.saveFile is not a function
  17. python快速入门【三】-----For 循环、While 循环
  18. 论文解读 X-CLIP : Expanding Language-Image Pretrained Models for General Video Recognition
  19. Android DataBinding学习和实践(二)
  20. QT5界面(窗口)之间传递参数

热门文章

  1. 用python绘制图形_使用Python的turtle画炫酷图形
  2. (转)java动态代理与aop
  3. 机器学习(周志华)- 第2章模型评估与选择笔记
  4. 分类器评估参数——准确度和精度的区别(足球荔枝)
  5. java查找链表中间元素_如何通过Java单次查找链表的中间元素
  6. javafx 调用java_Java“地铁”表(JavaFX)
  7. jsf教程_JSF范围教程– JSF / CDI会话范围
  8. assertj_AssertJ的SoftAssertions –我们需要它们吗?
  9. if else 工厂模式_没有IF-ELSE的工厂
  10. input发送a.jax_JAX-RS 2.0中的透明PATCH支持