使用Apache Camel Servlet组件访问接口出现HTTP 404错误求助
Apache Camel REST路由404错误修复方案
核心问题分析
你的404错误主要来自三个方面:依赖版本不兼容、冗余配置、API依赖过时。
1. 依赖版本不匹配
你使用的Camel版本是4.2.0,但camel-servlet-starter却用了3.21.1,跨大版本的依赖会导致组件加载异常,无法正确注册REST路由。
2. 过时的Servlet API依赖
Spring Boot 3.x基于Jakarta EE 9+,不再支持javax.servlet-api,需要使用Jakarta版本的API。
3. 冗余的Rest配置
restConfiguration()中设置的port(9090)和host("localhost")是多余的,Servlet组件会复用Spring Boot的服务器配置,这些手动设置会干扰路由注册。
分步修复
第一步:修正POM依赖
更新后的POM如下,注意统一Camel版本、移除过时依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.4</version> </parent> <groupId>com.camel.rest</groupId> <artifactId>testapp</artifactId> <version>1.0-SNAPSHOT</version> <properties> <camel.version>4.2.0</camel.version> <java.version>17</java.version> </properties> <dependencies> <!-- 移除javax.servlet-api,Spring Boot 3已包含jakarta.servlet-api --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-spring-boot-starter</artifactId> <version>${camel.version}</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-jackson</artifactId> <version>${camel.version}</version> </dependency> <!-- 统一Camel版本,使用4.2.0的servlet starter --> <dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-servlet-starter</artifactId> <version>${camel.version}</version> </dependency> <!-- 添加rest starter,确保REST DSL功能正常加载 --> <dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-rest-starter</artifactId> <version>${camel.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
第二步:简化Rest路由配置
移除冗余的port和host设置,简化后的路由类:
@Component public class RespRoute extends RouteBuilder { // 类名遵循大驼峰规范 @Override public void configure() throws Exception { // 仅配置servlet组件和绑定模式即可 restConfiguration().component("servlet") .bindingMode(RestBindingMode.JSON); rest().get("/hello") .produces(MediaType.APPLICATION_JSON_VALUE) .to("direct:hello"); from("direct:hello") .transform().constant("Welcome buddy"); } }
第三步:验证application.properties配置
保持现有配置即可,无需修改:
camel.component.servlet.mapping.context-path=/* server.port=9090
测试验证
重新启动应用,访问http://localhost:9090/hello,应该能正常返回"Welcome buddy"。如果仍有问题,可以查看启动日志,确认是否有CamelServlet注册成功的日志,以及REST路由是否正确初始化。
内容的提问来源于stack exchange,提问作者robert
相关产品推荐
相关产品推荐

