日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

使用Apache Camel表達REST服務的方法

瀏覽:432日期:2023-03-07 14:40:30
目錄
  • 使用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>camel-bean-validator</artifactId>
    		</dependency>
    	</dependencies>

    總結

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

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

    標簽: Linux Apache
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    久久久成人网| 国产 日韩 欧美 综合 一区| 精品视频免费| 国产成人在线中文字幕| 中文字幕在线视频网站| 影视先锋久久| 国产99精品一区| 欧美三区四区| 蜜桃视频一区二区三区| 日韩av免费| 日本vs亚洲vs韩国一区三区二区| 国产精品videosex极品| 欧美成人基地| 国产精品成人3p一区二区三区| 久久精品在线| 六月婷婷一区| 欧美国产极品| 色婷婷狠狠五月综合天色拍| 欧美.日韩.国产.一区.二区 | 日韩精选在线| 六月丁香综合| 久久99影视| 亚洲天堂久久| 91嫩草精品| 欧美xxxx中国| 久久三级福利| 国产伦精品一区二区三区视频| 亚洲a在线视频| 国产九九精品| 99在线观看免费视频精品观看| 国产麻豆一区二区三区| 午夜欧美精品久久久久久久| 成人va天堂| 国产视频一区二区在线播放| 国产综合欧美| 日韩专区在线视频| 欧洲av一区二区| 成人午夜网址| 中文字幕成人| 亚洲资源av| av在线日韩| 一区免费视频| 日本vs亚洲vs韩国一区三区二区| 日本午夜精品久久久久| 久久av网址| 欧美天堂在线| 国产精品蜜芽在线观看| 久久久久久网| 香蕉视频成人在线观看| 欧美精品激情| 婷婷综合亚洲| 99久久九九| 麻豆精品在线视频| 国产伦乱精品| 国产精品www.| 久久精品一区二区不卡| 丁香婷婷久久| 高清一区二区| 四虎8848精品成人免费网站| 久久精品色播| 日韩av有码| 久久精品欧美一区| 久久久成人网| 在线综合亚洲| 国产麻豆精品| 最新中文字幕在线播放| 久久青青视频| 99国内精品| 婷婷成人av| 肉色欧美久久久久久久免费看| 美女久久99| 亚洲美女久久精品| 色一区二区三区四区| 国产精品一区二区三区美女| 国产成人a视频高清在线观看| 国产一级久久| 亚洲一二三区视频| 久久久久久免费视频| 蜜臀精品一区二区三区在线观看| 国产精品嫩草影院在线看| 欧美日韩第一| 国产欧美69| 欧美日韩中文字幕一区二区三区| 日本久久一区| 91精品国产自产在线观看永久∴| 午夜精品免费| 欧美激情网址| 国产毛片一区| 国产精品传媒麻豆hd| 久久精品电影| 久久伊人久久| 香蕉久久国产| 美女视频黄免费的久久| 91精品国产乱码久久久久久久 | 欧美激情国产在线| 午夜免费一区| 久久99久久久精品欧美| 国产精品国产一区| 伊人精品一区| 国产传媒av在线| 久久成人高清| 亚洲ab电影| 自由日本语亚洲人高潮| 精品三级久久| 另类小说一区二区三区| 欧美日韩a区| 亚欧成人精品| 亚洲午夜免费| 久久亚洲欧洲| 欧美午夜网站| 亚洲国产专区| 欧美成人精品一级| 婷婷精品久久久久久久久久不卡| 成人污污视频| 97精品资源在线观看| 丝袜美腿亚洲一区二区图片| 欧美不卡高清| 一区二区三区四区在线看| 91亚洲国产| 国产不卡av一区二区| 亚洲日本免费电影| 欧美亚洲自偷自偷| 久久99精品久久久久久园产越南 | 免费观看不卡av| 最新中文字幕在线播放| 国产精品男女| 另类激情亚洲| 91精品蜜臀一区二区三区在线 | 日韩毛片一区| 久久亚洲视频| 久久美女精品| 香蕉久久99| 亚洲视频综合| 99热国内精品| 亚洲高清二区| 影院欧美亚洲| 日本在线高清| 9999国产精品| 丝袜美腿一区| 亚洲午夜黄色| 视频一区二区三区在线| 男女性色大片免费观看一区二区| 丝袜美腿一区二区三区| 天堂俺去俺来也www久久婷婷| 色综合视频一区二区三区日韩| 日韩成人午夜精品| 国产精品伦一区二区| 欧美日韩一区二区国产| 伊人久久av| 日韩三级视频| 日本午夜大片a在线观看| 精品三级av| 国产精品久久久久77777丨| 美女视频黄久久| 99久久www免费| 日韩精品高清不卡| 麻豆网站免费在线观看| 国产中文字幕一区二区三区| 久久国产精品99国产| 国产女人18毛片水真多18精品| 国产欧美啪啪| 久久国产精品久久w女人spa| 激情婷婷久久| 欧美精品激情| 亚洲精品伊人| 日韩激情视频网站| 亚洲三级国产| 日韩福利在线观看| 日韩一区二区免费看| 日韩av一区二区三区四区| 日韩av电影一区| 欧美日韩亚洲一区二区三区在线| 久久三级视频| 午夜欧美巨大性欧美巨大| 久久亚洲成人| 一区二区国产精品| 蜜臀av亚洲一区中文字幕| 久久激情av| 国产精选在线| 日本aⅴ免费视频一区二区三区| 精品一区二区男人吃奶 | 午夜影院一区| 日韩在线黄色| 国产日韩欧美高清免费| 黄色日韩在线| 国产福利电影在线播放| 亚洲成人免费| 国产日韩视频| 精品在线91| 国产精品久久观看| 午夜日韩av| 国产免费av国片精品草莓男男| 亚洲欧洲日韩| 亚洲欧美视频| 日韩成人亚洲| 午夜视频一区二区在线观看| 亚洲精品一区二区妖精| 精品国产中文字幕第一页| 日本综合视频| 中文字幕成人|