当前位置: 首页 > 知识库问答 >
问题:

带有Camel 2.25的Spring boot 2. x:Spring特定endpoint不工作

卫宏硕
2023-03-14

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

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

当我调查时,我发现每个请求都会到达CamelServlet,它完全不知道基于spring的普通@RestControllerendpoint(但只知道CamelREST使用者路由endpoint)。因此,仅对@RestControllerendpoint抛出此错误,而Camel RESTendpoint仍在工作。

下面是我的配置,

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>

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

共有1个答案

仲孙兴平
2023-03-14

这是因为您设置了上下文路径:/*模式意味着camel将在spring servlet dispatcher处理它之前拦截它(因为该路径是向camel注册的),所以如果您想要处理@Restcontroller,那么您需要为camel定义一个单独的上下文路径,例如:上下文路径:camel api/*模式,现在camel将注册camel api基路由,如果模式与camel api URL不同,它将通过spring boot处理

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

或者使用属性进行配置。

 类似资料:
  • 我在Azure上使用AKS群集。我试图使用DNS(http://my-api.default.svc.cluster.local:3000/)发现服务,但它不起作用(无法访问此站点)。使用服务IPendpoint,一切正常。 Kubectl描述服务库贝-dns--namesspace库贝-system kubectl描述svc我的api 来自第二个POD 从第二个POD网站正在运行,该网站使用相同

  • 我看了堆栈交换和Spring示例网站上的每个示例,一切似乎都应该有效。我一定错过了一些简单的东西 我有一个自定义注释,理想情况下,如果类被注释,我希望将其应用于类的所有方法,或者应用于任何注释的方法。以下是方面、测试和代码: 注释 方面 测验 后果 链接 实际来源

  • 我对spring boot和创建我的第一个应用程序非常陌生。创建数据源时,我使用了带有前缀的@ConfigurationProperties和要从Application.Property中读取的属性。 但是,这个设置似乎对我不起作用,我的程序没有运行。 我的pom.xml文件包含: 我的存储库类: 我的主要类: 请让我知道如果我需要提供任何其他信息以及。

  • 我正在使用Spring Webfluxs的功能endpoint,并希望为它生成一个openAPI定义。 我添加了SpringDoc,但是生成的openAPI定义是空的: 终结点的定义如下 是否可以从Springs的功能endpoint派生openAPI定义?

  • 我是Spring的新手,正在注册一个用户。我确实喜欢这个。 这很好,但这里的问题是,在我的欢迎中,我不需要这个用户对象。jsp页面,那么为什么要使模型对象更重呢。因此,我尝试了不使用ModelAttribute,这也适用于我,如下所示。 所以我只想知道什么是专业 我想将我的查询分类为以下4种类型的request.what如果我不需要在视图中发送数据并且我的请求是任何- 查询字符串即GET中的表单数

  • 我正在用Spring Boot2和Kotlin构建一个应用程序。 不知何故,我就是无法让ConfigurationProperties工作。 据我所知,当运行Maven时,应该在中创建文件 注释似乎是由Spring接收的,但是IntelliJ只是不创建文件,这意味着它只是不起作用的自动完成。 那么如何让IntelliJ创建文件呢?