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

从基本Spring Boot Camel REST DSL请求中获取404“未找到”错误

彭礼骞
2023-03-14

在过去的几天里,我一直在做一个Camel和REST DSL的基本演示,但最终我遇到了这个问题。我对Spring Boot的魔力还比较陌生,所以非常感谢您的反馈!

当我运行项目时,我的两条路由的一切看起来都正确启动。但是,当我尝试GET请求时,我总是会收到404“未找到”消息。

我仅有的两个类在同一个包中,所以我不认为可见性会是问题。我将该项目创建为Spring Start项目,并将其作为Spring Boot应用程序运行。日志显示这两条路由已成功启动,Tomcat正在使用端口8080。上下文路径是在应用程序中专门配置的。属性文件。

我的主要应用类:

包装com.example.demo;

import org.apache.camel.CamelContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@SpringBootApplication
@Configuration
@ComponentScan("com.example.demo")
public class DemoApplication {

@Autowired
CamelContext camelContext;

public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
 }
}  

我的路由器类:

package com.example.demo;

import org.springframework.stereotype.Component;
import org.apache.camel.LoggingLevel;
import org.apache.camel.model.rest.RestBindingMode;
import org.apache.camel.builder.RouteBuilder;   

@Component
public class DemoCamelRouter extends RouteBuilder {
    @Override
      public void configure() throws Exception {

        restConfiguration().component("servlet")
            .bindingMode(RestBindingMode.auto);

        rest().get("/hello")
          .to("direct:hello");

       from("direct:hello")
          .log(LoggingLevel.INFO, "Hello World")
          .transform().simple("Hello World");
       }
}

我的application.properties文件:

camel.springboot.main-run-controller=true
server.servlet.context-path=/demo

我正在使用http://localhost:8080/demo/hello

以下是我对Maven的依赖。

spring-boot-starter-web (managed:2.1.0.RELEASE)
spring-boot-starter-web-services (managed:2.1.0.RELEASE)
spring-boot-starter-test (managed:2.1.0.RELEASE)
camel-core: 2.22.2
camel-spring-boot-starter: 2.22.2
camel-servlet: 2.22.2
camel-http-common: 2.22.2
javax.servlet-api (managed:4.0.1)

最后,下面是日志显示的内容。

2018-11-21 00:58:38.454  INFO 11072 --- [           main] o.a.camel.spring.boot.RoutesCollector    : Starting CamelMainRunController to ensure the main thread keeps running
2018-11-21 00:58:38.470  INFO 11072 --- [           main] o.a.camel.spring.SpringCamelContext      : Route: route2 started and consuming from: direct://hello
2018-11-21 00:58:38.470  INFO 11072 --- [           main] o.a.camel.spring.SpringCamelContext      : Route: route1 started and consuming from: servlet:/hello?httpMethodRestrict=GET
2018-11-21 00:58:38.470  INFO 11072 --- [           main] o.a.camel.spring.SpringCamelContext      : Total 2 routes, of which 2 are started
2018-11-21 00:58:38.470  INFO 11072 --- [           main] o.a.camel.spring.SpringCamelContext      : Apache Camel 2.22.2 (CamelContext: camel-1) started in 0.236 seconds
2018-11-21 00:58:38.486  INFO 11072 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path '/demo'
2018-11-21 00:58:38.501  INFO 11072 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 3.882 seconds (JVM running for 6.868)
2018-11-21 01:00:12.445  INFO 11072 --- [nio-8080-exec-4] o.a.c.c.C.[Tomcat].[localhost].[/demo]   : Initializing Spring DispatcherServlet 'dispatcherServlet'
2018-11-21 01:00:12.445  INFO 11072 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2018-11-21 01:00:12.453  INFO 11072 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet        : Completed initialization in 8 ms

共有1个答案

那鹏
2023-03-14

从Camel的2.19版开始,CamelServlet默认设置为“/camel”。所以你的网址变成了:

http://localhost:8080/demo/camel/hello 

更新:在使用camel servlet时,还需要定义以下bean:

@Bean
public ServletRegistrationBean<Servlet> servletRegistrationBean() {
    ServletRegistrationBean<Servlet> registration = new ServletRegistrationBean<>(new CamelHttpTransportServlet(), "/camel/*");
    registration.setName("CamelServlet");
    return registration;
}

或者,您应该添加camel servlet starter依赖项,而不是camel servlet依赖项

 类似资料:
  • 问题内容: 我的科尔多瓦版本是 5.0.0 将应用程序部署在设备上时,对于所有ajax请求都收到404错误。在网络浏览器上,它可以正常工作,但是在设备上部署时,相同的应用程序无法正常工作。 我尝试添加关注者来解决该问题,但没有帮助。 Config.xml AndriodManiest.xml 我还在index.html文件中添加了以下内容,但也没有任何区别。 这里的任何人还有另一个解决此问题的技巧

  • 我一直试图在2.1.0版本中运行Spring引导。我得到404错误,即使试图访问localhost:8080。我已经修改了所有的控制器,服务在同一个主包,但没有运气。任何帮助都很感激。下面是我的控制台日志...甚至localhost:8080也不起作用。 控制器类:

  • 在通过jquery从html页面向java servlet发送GET请求时,我收到一个404错误(在web浏览器控制台中)。类文件。 在我的IntelliJ maven webapp项目中创建了核心文件之后,我真的不知道应该做什么: 我正在通过以下方式将我的项目构建到名为“target”的文件夹中: 建筑 然后,我把目标中的所有文件都上传到我部门的服务器上,但当我导航到索引时。html并单击按钮,

  • 无法使用spring boot加载非常简单的JSP页面,无法找到404。 src/main/java/samplewebjsp应用程序。Java语言 src/main/java/WebController.java SRC/main/webapp/WEB-INF/jsp/welcome.jsp 即使调试器显示正在从控制器RequestMapping返回“welcome”,也会得到404。 白标签错

  • 如果URI路径模板变量不能转换为指定的类型,JAX-RS运行时将向客户端返回HTTP 400(“Bad Request”)错误。如果@PathParam注释不能强制转换为指定的类型,JAX-RS运行时将向客户端返回HTTP 404(“未找到”)错误。 有人能解释一下区别吗,也许举个例子?