我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用Apache Camel表达REST服务的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用Apache Camel表达REST服务的方法

目录
  • 使用Apache Camel的REST服务
    • 如何使用Apache Camel来表达REST服务
      • 定义端点
      • 如何覆盖端口
      • 覆盖上下文路径
      • 在请求对象中定义验证规则
      • 如何处理异常
    • 总结

    使用Apache Camel的REST服务

    Apache Camel可以作为一个独立的或嵌入的库在任何地方运行,它可以帮助整合。继续阅读,了解如何使用它来暴露REST服务。

    如何使用Apache Camel来表达REST服务

    Camel REST允许使用Restlet、Servlet和许多这样的HTTP感知组件来实现REST服务的创建。

    大家都知道,Camel的主要功能是路由引擎。路由可以使用基于java的DSL或基于XML来开发。在这篇文章中,我将按照JavaDSL来开发一个REST服务。

    定义端点

    为了定义端点,我们需要使用Apache Camel DSL与 Java DSL(尽管你可以使用XML)。

    下面是Java DSL。

    Java

    rest("/api/products")
         .get().route().to("...")
         .post().route().to("...")
         .delete().route().to("...");

    它与Camel路由类似,但使用rest() 。我们需要提到用于暴露端点的组件服务。Camel支持以下组件来实现Bootstrap REST服务。

    • Servlet
    • Spark REST
    • Netty HTTP
    • Jetty

    如果你打算将Camel与Spring Boot框架集成以暴露服务,最好使用servlet 组件,因为Spring Boot支持嵌入式Tomcat,Camel可以使用它。

    让我们把REST配置成。

    Java

    // Define the implementing component - and accept the default host and port
    restConfiguration()
      .component("servlet");

    如何覆盖端口

    你可以用你选择的任何其他端口号来覆盖默认的8080端口,方法是将.port() 设置为restConfiguration() API,或者,如果你将Apache Camel与Spring Boot集成,你可以使用application.properties 中的server.port=8082

    覆盖上下文路径

    默认情况下,Camel将导入请求映射到/camel/* 。你可以通过使用application.properties 作为camel.component.servlet.mapping.context-path=/services/api/*,将其覆盖到你选择的任何特定路径。

    配置绑定模式,将请求集合到POJO对象。如果设置为 "off "以外的任何内容,生产者将尝试把传入信息的主体从inType转换为jsON或XML,而把响应从JSON或XML转换为outType。有五个枚举,其值可以是以下之一:自动、关闭、JSON、XML或json_xml。为了实现这一点,你需要将绑定模式设置为restConfiguration() ,因为bindingMode(RestBindingMode.auto);

    请看下面的REST API的配置样本。

    @Component
    public class HttpRouteBuilder extends BaseRouteBuilder {
    	@Override
    	public void configure() throws Exception {
    		super.configure();
    		// it tells Camel how to configure the REST service
    		restConfiguration()
    				// Use the 'servlet' component.
    				// This tells Camel to create and use a Servlet to 'host' the RESTful API.
    				// Since we're using Spring Boot, the default servlet container is Tomcat.
    				.component("servlet")
    				// Allow Camel to try to marshal/unmarshal between Java objects and JSON
    				.bindingMode(RestBindingMode.auto);
    
    		rest().get("/kyc/{uid}").route().process("httpRequestProcessor").to("log:?level=INFO&showBody=true").endRest();
    
    		rest().post("/kyc").type(RequestObject.class).route().to("bean-validator:myvalidatorname")
    				.process("httpRequestProcessor").to("log:?level=INFO&showBody=true");
    	}
    }

    您可以使用Apache Camel bean验证器组件验证传入的请求,这需要在您的Maven POM中添加camel-bean-validator 依赖关系。

    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-bean-validator</artifactId>
    </dependency>

    在请求对象中定义验证规则

    为了实现输入请求验证,你需要为POJO/请求类中的字段添加验证注解。这些注释可在包javax.validation.constraints 。JSR-303 API中最常见的是。

    • @NotNull - 检查该字段是否是null
    • @AssertTrue/@AssertFalse - 检查该字段是否为真或假
    • @Pattern(regex=, flags=) - 检查该字段是否与给定的 ,与给定的regex flags

    org.hibernate.validator.constraints ,有一些Hibernate特有的注释,比如。

    • @Email - 检查该字段是否包含一个有效的电子邮件地址
    • @CreditCardNumber - 这个可能很明显
    • @NotEmpty - 检查注解的字段是否为空或空。

    如何处理异常

    你可以处理不同类型的异常,并使用Apache Camel异常条款(onException )向客户端发送自定义的错误信息,无论是在路由级别还是在全球级别。你也可以重写REST API调用的HTTP响应代码和消息。

    public class BaseRouteBuilder extends RouteBuilder {
    	@Override
    	public void configure() throws Exception {
    		onException(BeanValidationException.class).handled(true).process(new Processor() {
    			@Override
    			public void process(Exchange exchange) throws Exception {
    				Throwable cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
    				exchange.getMessage().setHeader(Exchange.HTTP_RESPONSE_CODE, 400);
    				exchange.getMessage().setHeader(Exchange.CONTENT_TYPE, MediaType.APPLICATION_JSON);
    				exchange.getMessage().setBody("{error:" + cause.getMessage() + "}");
    			}
    		});
    		onException(InvalidRequestException.class).handled(true).process(new Processor() {
    			@Override
    			public void process(Exchange exchange) throws Exception {
    				Throwable cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
    				exchange.getMessage().setHeader(Exchange.HTTP_RESPONSE_CODE, 400);
    				exchange.getMessage().setHeader(Exchange.CONTENT_TYPE, MediaType.APPLICATION_JSON);
    				exchange.getMessage().setBody("{error:" + cause.getMessage() + "}");
    			}
    		});
    		onException(Exception.class).handled(true).process(new Processor() {
    			@Override
    			public void process(Exchange exchange) throws Exception {
    				Throwable cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
    				exchange.getMessage().setHeader(Exchange.HTTP_RESPONSE_CODE, 500);
    				exchange.getMessage().setHeader(Exchange.CONTENT_TYPE, MediaType.APPLICATION_JSON);
    				exchange.getMessage().setBody("{error:" + cause.getMessage() + "}");
    			}
    		});
    }

    注意:在这里我创建了一个基类来处理各种异常,在我的主REST API构建器类(HttpRouteBuilder)中,它扩展了BaseRouteBuilder

    最后是POM。

    <dependencyManagement>
    		<dependencies>
    			<!-- Spring Boot BOM -->
    			<dependency>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-dependencies</artifactId>
    				<version>${spring-boot.version}</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    			<!-- Camel BOM -->
    			<dependency>
    				<groupId>org.apache.camel.springboot</groupId>
    				<artifactId>camel-spring-boot-dependencies</artifactId>
    				<version>${camel.version}</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    			<dependency>
    				<groupId>org.projectlombok</groupId>
    				<artifactId>lombok</artifactId>
    				<version>1.18.20</version>
    				<scope>provided</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-actuator</artifactId>
    			<exclusions>
    				<exclusion>
    					<groupId>com.fasterxml.jackson.datatype</groupId>
    					<artifactId>jackson-datatype-jsr310</artifactId>
    				</exclusion>
    				<exclusion>
    					<groupId>com.fasterxml.jackson.core</groupId>
    					<artifactId>jackson-annotations</artifactId>
    				</exclusion>
    			</exclusions>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    			<exclusions>
    				<exclusion>
    					<groupId>com.fasterxml.jackson.datatype</groupId>
    					<artifactId>jackson-datatype-jsr310</artifactId>
    				</exclusion>
    			</exclusions>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.camel.springboot</groupId>
    			<artifactId>camel-spring-boot-starter</artifactId>
    
    		</dependency>
    
    		<dependency>
    			<groupId>org.projectlombok</groupId>
    			<artifactId>lombok</artifactId>
    			<optional>true</optional>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.camel.springboot</groupId>
    			<artifactId>camel-jackson-starter</artifactId>
    			<exclusions>
    				<exclusion>
    					<groupId>com.fasterxml.jackson.core</groupId>
    					<artifactId>jackson-annotations</artifactId>
    				</exclusion>
    			</exclusions>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.camel.springboot</groupId>
    			<artifactId>camel-servlet-starter</artifactId>
    		</dependency>
    		<!-- Testing Dependencies -->
    		<dependency>
    			<groupId>org.apache.camel</groupId>
    			<artifactId>camel-test-spring</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    			<exclusions>
    				<exclusion>
    					<groupId>com.vaadin.external.google</groupId>
    					<artifactId>android-json</artifactId>
    				</exclusion>
    			</exclusions>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.camel</groupId>
    			<artifactId>camel-swagger-java</artifactId>
    
    		</dependency>
    		<dependency>
    			<groupId>org.apache.camel</groupId>
    			<artifactId&gt;camel-bean-validator</artifactId>
    		</dependency>
    	</dependencies>

    总结

    现在你知道了如何用Camel暴露REST API,你可能想知道什么时候/为什么要用Apache Camel来构建REST服务。简单的答案是,如果你已经在使用Apache Camel来整合不同协议和应用程序之间的数据,那么REST是你需要支持的另一个数据源,而不是用Spring Boot或任何其他框架来构建REST服务。你可以利用Camel REST组件来暴露ReGbtREST API,并使用已知的Camel DSL来消费/生产消息,这有助于你规范技术桩。你还可以扩展Camel REST,使其包括Swagger,以便使用camel-swagger 组件提供API规范。

    到此这篇关于使用Apache Camel表达REST服务的方法的文章就介绍到这了,更多相关Apache Camel的REST服务内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    使用Apache Camel表达REST服务的方法

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    使用Apache Camel表达REST服务的方法

    目录使用Apache Camel的REST服务如何使用Apache Camel来表达REST服务定义端点如何覆盖端口覆盖上下文路径在请求对象中定义验证规则如何处理异常总结使用Apache Camel的REST服务 Apache Camel可
    2022-06-10

    如何使用Apache Camel表达REST服务

    今天小编给大家分享一下如何使用Apache Camel表达REST服务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。使用Ap
    2023-07-02

    java中Lamdba表达式的使用方法

    这篇文章主要介绍了java中Lamdba表达式的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、Lamdba若只需要一个参数时,小括号可以省略Consumer
    2023-06-15

    Java正则表达式——group方法的使用

    这篇文章主要介绍了Java正则表达式group方法的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01

    Java 中使用正则表达式的方法

    本篇文章给大家分享的是有关Java 中使用正则表达式的方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用RegexString.with(string).pattern(p
    2023-05-31

    Android Studio中使用lambda表达式的方法

    1.module的build.gradle里buildTypes中添加:compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility J
    2023-05-31

    lambda表达式在java8中的使用方法

    这篇文章给大家介绍lambda表达式在java8中的使用方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。定义 TantanitReader:public class TantanitReader { private
    2023-05-31

    Apache中伪静态Rewrite的使用方法和URL重写规则表达式讲解

    目录一、安装rewrite模块二、配置文件httpd.conf中启用Rewrite三、在服务器中找到配置文件vhosts.conf,启用.htAccess四、在要启用伪静态的项目根目录下建立 .htaccess 文件五、重启Apache服务
    2022-11-20

    Notepad++使用正则表达式匹配的方法

    这篇文章主要介绍了Notepad++使用正则表达式匹配的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-15

    PHP 正则表达式函数的使用方法

    php 正则表达式函数提供强大的文本处理能力,包括:preg_match:检查字符串中是否存在匹配模式。preg_match_all:获取字符串中所有匹配模式的数组。preg_replace:用替换文本替换字符串中的所有匹配模式。preg_
    PHP 正则表达式函数的使用方法
    2024-04-21

    JS正则表达式的使用方法是什么

    本篇内容主要讲解“JS正则表达式的使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS正则表达式的使用方法是什么”吧!测试字符串是否合规这种特性常被用来检测前端输入的字段是否符合要求
    2023-07-06

    Python正则表达式的使用方法是什么

    这篇文章主要讲解了“Python正则表达式的使用方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python正则表达式的使用方法是什么”吧!什么是正则表达式?简而言之,正则表达式(r
    2023-06-16

    编程热搜

    目录