【问题标题】:Spring-MVC: Controller working in one project but not the other(404 not found)Spring-MVC:控制器在一个项目中工作,但不在另一个项目中(未找到 404)
【发布时间】:2021-08-08 22:12:36
【问题描述】:

我有以下控制器:

 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RequestMapping(value="/")
 public class ToDoController 
 {  
   @GetMapping
   public String print()
   {
     return "Hello";
   }
 }

我也按如下方式运行 spring 应用程序:

 import java.util.Collections;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Startup 
{
    public static void main(String[] args) 
    {
        SpringApplication app = new SpringApplication(Startup.class);
        app.setDefaultProperties(Collections
                .singletonMap("server.port", "9005"));
        app.run(args);
    }

}

现在当我运行 localhost:9005/ 时,我确实看到了以下弹出窗口

2021-05-19 12:05:00.961 INFO 40900 --- [nio-9005-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]:初始化 Spring DispatcherServlet 'dispatcherServlet' 2021-05-19 12:05:00.961 INFO 40900 --- [nio-9005-exec-1] os.web.servlet.DispatcherServlet:初始化 Servlet 'dispatcherServlet' 2021-05-19 12:05:00.962 INFO 40900 --- [nio-9005-exec-1] os.web.servlet.DispatcherServlet:在 1 毫秒内完成初始化

我认为这意味着某些连接正在工作,但我在网页上收到 404 错误。

现在奇怪的是,当我将这两个类复制粘贴到另一个项目(在我以前工作过并且知道工作的包中)时,代码运行良好。但是,如果在同一个项目中我创建了一个新包并在该包中放置了带有新 Startup 类的新控制器,则控制器也不起作用(404 错误)。

我用 eclipse 构建了这个项目,并在类路径中包含了所有依赖项,我从来不需要制作 web.xml 文件,而且我发现的大多数解决方案都需要你更改该文件。

任何帮助都将不胜感激,因为我没有做任何与有效的项目/包不同的工作和不工作的项目/包。

【问题讨论】:

  • StartupToDoController 驻留在哪些包中?
  • 你只是通过这个简单的问题让我意识到问题。我的启动和控制器在不同的包中。当我把它放在同一个包中时它可以工作,当我不它时它不起作用。我怎样才能使它工作,以便控制器在一个包中,而启动在另一个包中?

标签: java spring spring-mvc


【解决方案1】:

StartupToDoController 驻留在哪些包中?

如果控制器驻留在不是Startup 包的“后代”的包中,则默认情况下它不会被组件扫描拾取。您需要使用 @SpringBootApplication.scanBasePackages 将 Spring 指向要扫描的其他包。

【讨论】:

  • 非常感谢。我通过将它添加到 StartUp 类中得到它:@ComponentScan(basePackages = "RESTAPI.controllers")。我猜对于多个包它会是一个数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 2013-10-10
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 2015-12-28
相关资源
最近更新 更多