我有一个带有spring-boot2.x和camel2.25的项目。它有不同的骆驼路线,很少有REST消费者路线。到目前为止一切都很好。
现在,我添加了一些带有一些端点的普通spring-boot@RestController类。但这些都不起作用(投掷404(。
当我调查时,我发现每个请求都会到达CamelServlet,它完全不知道基于spring的正常@RestController端点(但只知道CamelREST消费者路由端点(。因此,仅对@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>
我做错了什么吗?有什么建议吗?提前谢谢。
这是因为您设置了上下文路径://*pattern意味着camel将在spring-servlet调度器处理它之前拦截它(因为该路径是用camel注册的(,所以如果您想处理@Restcontroller,则需要为camel定义一个单独的上下文路径,例如:context-path:coal-api//strong>*mode,现在,camel将注册camel-api基本路由,如果模式与camel-apiURL不同,它将由spring-boot 处理
@Bean
ServletRegistrationBean servletRegistrationBean() {
ServletRegistrationBean servlet = new ServletRegistrationBean
(new CamelHttpTransportServlet(), "camel-api/*");
servlet.setName("CamelServlet");
return servlet;
}
或使用属性进行配置。