Spring 使用 Camel 2.25 启动 2.x : Spring 特定端点不工作

Spring boot 2.x with Camel 2.25 : Spring specific endpoints not working

我有一个带有 spring-boot 2.x 和 camel 2.25 的项目。它有不同的骆驼路线以及很少的 REST 消费者路线。到目前为止一切都很好。

现在我添加了一些带有一些端点的正常 spring-boot @RestController 类。但是这些都不起作用(抛出 404)。

当我调查时发现,每个请求都到达 CamelServlet,它完全不知道基于 spring 的普通 @RestController 端点(但只知道 Camel REST 消费者路由端点)。因此,仅针对 @RestController 端点抛出此错误,而 Camel REST 端点仍在工作。

下面是我的配置,

spring:
 application:
  name: gateway
 main:
  web-application-type: SERVLET 


server:
 servlet:
  context-path: /gateway
 port: 8080

camel:
 springboot:
  name: gateway
 component:
  servlet:
   mapping:
    enabled: true
    context-path: /*
  mail:
   basic-property-binding: true

下面是我的 POM

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-servlet-starter</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-mail-starter</artifactId>
    </dependency>

我做错了什么吗?有什么建议吗?提前致谢。

这是因为你设置了 context-path: /* pattern means camel is going intercept (because this path is registered with camel) 它,在 spring 之前servlet 调度程序会处理它,所以如果你想处理 @Restcontroller 那么你需要为骆驼定义一个单独的上下文路径,例如:context-path: camel-api/* pattern,现在camel会注册camel-api base route,如果pattern与camel不同-api URL, 会由spring-boot

处理
@Bean
ServletRegistrationBean servletRegistrationBean() {
    ServletRegistrationBean servlet = new ServletRegistrationBean
      (new CamelHttpTransportServlet(), "camel-api/*");
    servlet.setName("CamelServlet");
    return servlet;
}

或使用属性进行配置。