成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

使用Apache Camel表達(dá)REST服務(wù)的方法

瀏覽:369日期:2023-03-07 14:40:30
目錄
  • 使用Apache Camel的REST服務(wù)
    • 如何使用Apache Camel來表達(dá)REST服務(wù)
      • 定義端點
      • 如何覆蓋端口
      • 覆蓋上下文路徑
      • 在請求對象中定義驗證規(guī)則
      • 如何處理異常
    • 總結(jié)

    使用Apache Camel的REST服務(wù)

    Apache Camel可以作為一個獨立的或嵌入的庫在任何地方運行,它可以幫助整合。繼續(xù)閱讀,了解如何使用它來暴露REST服務(wù)。

    如何使用Apache Camel來表達(dá)REST服務(wù)

    Camel REST允許使用Restlet、Servlet和許多這樣的HTTP感知組件來實現(xiàn)REST服務(wù)的創(chuàng)建。

    大家都知道,Camel的主要功能是路由引擎。路由可以使用基于Java的DSL或基于XML來開發(fā)。在這篇文章中,我將按照J(rèn)avaDSL來開發(fā)一個REST服務(wù)。

    定義端點

    為了定義端點,我們需要使用Apache Camel DSL與 Java DSL(盡管你可以使用XML)。

    下面是Java DSL。

    Java

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

    它與Camel路由類似,但使用rest() 。我們需要提到用于暴露端點的組件服務(wù)。Camel支持以下組件來實現(xiàn)Bootstrap REST服務(wù)。

    • Servlet
    • Spark REST
    • Netty HTTP
    • Jetty

    如果你打算將Camel與Spring Boot框架集成以暴露服務(wù),最好使用servlet 組件,因為Spring Boot支持嵌入式Tomcat,Camel可以使用它。

    讓我們把REST配置成。

    Java

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

    如何覆蓋端口

    你可以用你選擇的任何其他端口號來覆蓋默認(rèn)的8080端口,方法是將.port() 設(shè)置為restConfiguration() API,或者,如果你將Apache Camel與Spring Boot集成,你可以使用application.properties 中的server.port=8082

    覆蓋上下文路徑

    默認(rèn)情況下,Camel將導(dǎo)入請求映射到/camel/* 。你可以通過使用application.properties 作為camel.component.servlet.mapping.context-path=/services/api/*,將其覆蓋到你選擇的任何特定路徑。

    配置綁定模式,將請求集合到POJO對象。如果設(shè)置為 "off "以外的任何內(nèi)容,生產(chǎn)者將嘗試把傳入信息的主體從inType轉(zhuǎn)換為JSON或XML,而把響應(yīng)從JSON或XML轉(zhuǎn)換為outType。有五個枚舉,其值可以是以下之一:自動、關(guān)閉、JSON、XML或json_xml。為了實現(xiàn)這一點,你需要將綁定模式設(shè)置為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 依賴關(guān)系。

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

    在請求對象中定義驗證規(guī)則

    為了實現(xiàn)輸入請求驗證,你需要為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 )向客戶端發(fā)送自定義的錯誤信息,無論是在路由級別還是在全球級別。你也可以重寫REST API調(diào)用的HTTP響應(yīng)代碼和消息。

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

    注意:在這里我創(chuàng)建了一個基類來處理各種異常,在我的主REST API構(gòu)建器類(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>camel-bean-validator</artifactId>
    		</dependency>
    	</dependencies>

    總結(jié)

    現(xiàn)在你知道了如何用Camel暴露REST API,你可能想知道什么時候/為什么要用Apache Camel來構(gòu)建REST服務(wù)。簡單的答案是,如果你已經(jīng)在使用Apache Camel來整合不同協(xié)議和應(yīng)用程序之間的數(shù)據(jù),那么REST是你需要支持的另一個數(shù)據(jù)源,而不是用Spring Boot或任何其他框架來構(gòu)建REST服務(wù)。你可以利用Camel REST組件來暴露REST API,并使用已知的Camel DSL來消費/生產(chǎn)消息,這有助于你規(guī)范技術(shù)樁。你還可以擴展Camel REST,使其包括Swagger,以便使用camel-swagger 組件提供API規(guī)范。

    到此這篇關(guān)于使用Apache Camel表達(dá)REST服務(wù)的方法的文章就介紹到這了,更多相關(guān)Apache Camel的REST服務(wù)內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

    標(biāo)簽: Linux Apache
    成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
    91久久精品午夜一区二区| 久久欧美肥婆一二区| 久久99精品网久久| 中文字幕中文字幕一区二区| 欧美日韩成人综合在线一区二区| 亚洲福利av| 91蜜桃在线观看| 国产老妇另类xxxxx| 日韩精品一二三区| 亚洲男人的天堂一区二区| 日韩美一区二区三区| 色婷婷国产精品综合在线观看| 欧美日韩日本网| 99久久精品99国产精品| 国产麻豆日韩欧美久久| 性做久久久久久免费观看| 亚洲欧美另类在线| 亚洲天堂2014| 1区2区3区欧美| 亚洲欧美色综合| 亚洲婷婷在线视频| 亚洲婷婷在线视频| 亚洲激情网站免费观看| 亚洲欧美视频在线观看| 亚洲人成精品久久久久久| 欧美激情综合五月色丁香小说| 久久婷婷国产综合精品青草| 精品福利一二区| 精品久久人人做人人爽| 日韩欧美123| 欧美一区二区三区不卡| 精品sm在线观看| 久久久久久久久久看片| 国产亚洲成年网址在线观看| 久久精品免费在线观看| 国产精品久久毛片| 亚洲欧美日韩国产手机在线 | 日本成人中文字幕在线视频| 日韩影院精彩在线| 麻豆91免费观看| 国产一区二区三区| 波多野结衣亚洲| 欧美视频不卡| 亚洲美女黄网| 在线精品亚洲一区二区不卡| 7777精品伊人久久久大香线蕉| 制服.丝袜.亚洲.另类.中文| 精品国产乱码久久久久久浪潮| 久久亚洲综合av| 亚洲同性gay激情无套| 亚洲成av人片在线观看无码| 久久电影网站中文字幕| eeuss鲁片一区二区三区在线看| 欧美性事免费在线观看| 国产日韩精品久久| 精品视频1区2区3区| 精品久久久网站| 亚洲免费成人av| 老司机精品视频一区二区三区| 丁香激情综合国产| 在线综合视频| 日韩亚洲欧美一区二区三区| 国产精品久久久99| 美女视频网站黄色亚洲| 91麻豆国产自产在线观看| 香蕉久久夜色精品| 欧美白人最猛性xxxxx69交| 亚洲免费av高清| 久久99久久久久| 91玉足脚交白嫩脚丫在线播放| 成人免费看的视频| 国产专区一区| 国产亚洲一级| 欧美亚洲国产一区在线观看网站| 欧美精品 国产精品| 国产亚洲欧美色| 亚洲一区精品在线| 久久99热狠狠色一区二区| 99久久免费精品高清特色大片| 狠狠爱www人成狠狠爱综合网| 国产日韩欧美一区二区| 91九色02白丝porn| 欧洲激情一区二区| 欧美日韩另类一区| 欧美性色综合网| 91精品国产欧美一区二区18 | 亚洲在线成人精品| 喷水一区二区三区| av网站一区二区三区| 亚洲国产日韩在线| 欧美性高清videossexo| 国产亚洲欧美中文| 日韩精品免费视频人成| 91小视频在线| 亚洲精品男同| 91麻豆精品国产自产在线观看一区 | 亚洲二区在线视频| 国产不卡在线一区| 狠狠综合久久| 色婷婷久久综合| 久久久久久久免费视频了| 五月婷婷综合网| 日韩不卡一区二区三区| 99精品国产99久久久久久白柏| 国产日韩一区二区| 精品少妇一区二区三区日产乱码 | 在线观看欧美黄色| 久久精品人人做| 青青草原综合久久大伊人精品优势| 久久99精品国产.久久久久久| 欧美日韩一区二区国产| 欧美色图在线观看| 国产精品视频在线看| 久久精品国内一区二区三区| 国语自产精品视频在线看抢先版结局| 91黄色在线观看| 国产精品国产馆在线真实露脸 | 日韩免费高清av| 国内精品久久久久久久97牛牛 | 久久午夜老司机| 久久精品国产澳门| 一区二区欧美日韩| 精品国产免费人成在线观看| 三级亚洲高清视频| 91久久夜色精品国产九色| 欧美成人伊人久久综合网| 日韩有码一区二区三区| 怡红院精品视频在线观看极品| 91精品国产91久久综合桃花| 午夜精品一区在线观看| 亚洲视频观看| 26uuu精品一区二区| 国内精品免费在线观看| 色菇凉天天综合网| 一区二区三区中文字幕电影 | 久久蜜桃一区二区| 蜜乳av一区二区| 亚洲视频二区| 亚洲婷婷在线视频| 欧美激情视频一区二区三区在线播放| 91 com成人网| 日本人妖一区二区| 欧美中文字幕| 亚洲成av人片| 校园春色综合网| 亚洲精选在线视频| 亚洲人妖在线| 亚洲男人电影天堂| 亚洲精品社区| 最新高清无码专区| 激情婷婷欧美| 国产精品家庭影院| 国产精品hd| 国产精品超碰97尤物18| 国产精品v欧美精品∨日韩| 久久久久国产精品麻豆ai换脸| 成人性生交大片免费| 欧美一区二区三区四区五区| 亚洲第一激情av| 亚洲午夜极品| 亚洲欧美色图小说| 欧美欧美全黄| 国产精品国产馆在线真实露脸 | 欧美主播一区二区三区| 蜜臀久久99精品久久久画质超高清| 久久精品99| 日韩二区三区四区| 久久久一二三| 亚洲国产成人精品视频| 国产情侣一区| 亚洲自拍偷拍图区| 好吊色欧美一区二区三区视频| 中文字幕中文字幕一区二区| 亚洲午夜精品福利| 国产亚洲精久久久久久| 欧美性事免费在线观看| 一区二区三区美女视频| 久久国产日韩欧美| 免播放器亚洲一区| 精品欧美乱码久久久久久1区2区| 99久久精品国产麻豆演员表| 国产精品视频在线看| 亚洲一区二区三区高清| 亚洲成a人片综合在线| 在线观看91视频| 国产成人精品免费一区二区| 99热精品国产| 成人黄色在线网站| 91在线免费看| 色综合久久久久久久久久久| 欧美日韩在线播放一区| 精品国产一区a| 亚洲成人精品一区| 成人v精品蜜桃久久一区| 欧美黄色大片网站| 欧美一级视频精品观看| 中文字幕精品—区二区四季| 久久精品视频在线看| 精品国产伦一区二区三区免费| 粉嫩在线一区二区三区视频|