You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:17:26