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

Spring Boot Camel POST端点404 Not Found问题排查求助

问题描述

我正在开发基于Spring Boot 3.2.4、Camel 4.3.0、Java 17的项目,已配置REST POST路由,但通过cURL或Postman访问http://localhost:5001/v1/test/api时返回404 Not Found,附上相关配置代码,请求协助解决该问题。

配置代码
@Configuration
public class CamelWebConfiguration {
    private static final String CAMEL_URL_MAPPING = "/v1/*";
    private static final String CAMEL_SERVLET_NAME = "CamelServlet";
    private final RoutesConfiguration routesConfiguration;

   @Autowired
   public CamelWebConfiguration(RoutesConfiguration routesConfiguration) {
         this.routesConfiguration = routesConfiguration;
   }

  @Bean
  public ServletRegistrationBean<CamelHttpTransportServlet> servletRegistrationBean() throws Exception {
        ServletRegistrationBean<CamelHttpTransportServlet> registration =
                new ServletRegistrationBean<>(new CamelHttpTransportServlet(), CAMEL_URL_MAPPING);
        registration.setName(CAMEL_SERVLET_NAME);
        System.out.println("2222211111111111 " + registration.getUrlMappings());
        routesConfiguration.configure();
        return registration;
    }
}


@Component
public class RoutesConfiguration extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        getContext().setTracing(true); // Enable Camel route tracing
        System.out.println("22222222222");
        onException(Exception.class)
                .handled(true)
                .log(LoggingLevel.ERROR, log, "Error processing XML request: ${exception.message}")
                .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(500))
                .setBody(constant("Error processing XML request"))
                .to("direct:errorHandler");

        from("direct:errorHandler")
                .log("Handling error: ${body}")
                // Additional error handling logic goes here
                .end();

        // Configure REST configuration
        restConfiguration()
                .enableCORS(true)
                .port(5001)
                .component("servlet")
                .bindingMode(RestBindingMode.auto);

        // Define existing REST endpoint
        rest("/test")
                .post("/api")
                .id("api-route")
                .consumes("application/xml; charset=UTF-8")
                .produces("application/xml; charset=UTF-8")
                .routeId("request-handler")
                .type(String.class)
                .outType(String.class)
                .to("direct:processXml");

        // Camel route for processing XML data
        from("direct:processXml")
                .autoStartup(true)
                .routeId("request-handler")
                .log(LoggingLevel.INFO, log, "Received XML request: ${body}")
                .setHeader(Exchange.HTTP_METHOD, constant("POST"))
                .setHeader(Exchange.CONTENT_TYPE, constant("application/xml"))
                .setExchangePattern(ExchangePattern.InOut)
                .convertBodyTo(String.class)
                .process(xmlProcessor)
                .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(200))
                .log(LoggingLevel.INFO, "Processed XML response: ${body}")
                .end();
    }

    @PostConstruct
    public void startRoute() throws Exception {
        RouteController routeController = camelContext.getRouteController();
        routeController.startRoute("request-handler");
    }
}
问题排查与解决方案
  • 重复RouteId引发路由冲突:REST定义的路由和direct:processXml路由使用了相同的routeId="request-handler",Camel不允许重复ID,会导致其中一个路由无法正常注册。将direct:processXml的routeId修改为唯一值,比如xml-processing-route。
  • 手动调用configure()导致重复初始化:CamelWebConfiguration中手动调用routesConfiguration.configure()属于冗余操作,Spring Boot整合Camel时会自动调用RouteBuilder的configure方法,删除该行代码。
  • 端口配置优先级问题:restConfiguration()中的.port(5001)在Servlet模式下不生效,实际端口由Spring Boot的server.port配置决定。检查application.properties或application.yml中是否设置了server.port=5001。
  • 冗余的路由启动代码:direct:processXml已设置autoStartup(true),REST路由默认自动启动,删除@PostConstruct注解的startRoute()方法,避免因重复RouteId导致启动错误路由。
  • 依赖完整性检查:确保项目依赖中包含camel-spring-boot-starter和camel-servlet-starter,否则Servlet组件无法正常工作。

内容的提问来源于stack exchange,提问作者kidy ad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:49:57