Spring-MVC:控制器在一个项目中工作,但在另一个项目中不工作(404 未找到)
Spring-MVC: Controller working in one project but not the other(404 not found)
我有以下控制器:
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 信息 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] o.s.web.servlet.DispatcherServlet:正在初始化 Servlet 'dispatcherServlet'
2021-05-19 12:05:00.962 INFO 40900 --- [nio-9005-exec-1] o.s.web.servlet.DispatcherServlet:1 毫秒内完成初始化
我认为这意味着某些连接正在工作,但我在网页上收到 404 错误。
现在奇怪的是,当我将这两个 class 复制粘贴到另一个项目(在我以前工作过并且知道有效的包中)时,代码 运行 没问题。但是,如果在同一个项目中我创建了一个新包并在该包中放置了新的控制器和一个新的 Startup class,控制器也不起作用(404 错误)。
我用 eclipse 构建了这个项目,并将所有依赖项包含在 class 路径中,我从来不需要制作 web.xml 文件,而且我发现的大多数解决方案都需要您更改该文件。
任何帮助将不胜感激,因为我没有做任何不同于 project/package 有效和无效的事情。
Startup
和 ToDoController
位于哪些包中?
如果控制器所在的包不是 Startup
包的 'descendant',默认情况下它不会被组件扫描拾取。您需要使用 @SpringBootApplication.scanBasePackages
将 Spring 指向要扫描的其他包。
我有以下控制器:
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 信息 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] o.s.web.servlet.DispatcherServlet:正在初始化 Servlet 'dispatcherServlet' 2021-05-19 12:05:00.962 INFO 40900 --- [nio-9005-exec-1] o.s.web.servlet.DispatcherServlet:1 毫秒内完成初始化
我认为这意味着某些连接正在工作,但我在网页上收到 404 错误。
现在奇怪的是,当我将这两个 class 复制粘贴到另一个项目(在我以前工作过并且知道有效的包中)时,代码 运行 没问题。但是,如果在同一个项目中我创建了一个新包并在该包中放置了新的控制器和一个新的 Startup class,控制器也不起作用(404 错误)。
我用 eclipse 构建了这个项目,并将所有依赖项包含在 class 路径中,我从来不需要制作 web.xml 文件,而且我发现的大多数解决方案都需要您更改该文件。
任何帮助将不胜感激,因为我没有做任何不同于 project/package 有效和无效的事情。
Startup
和 ToDoController
位于哪些包中?
如果控制器所在的包不是 Startup
包的 'descendant',默认情况下它不会被组件扫描拾取。您需要使用 @SpringBootApplication.scanBasePackages
将 Spring 指向要扫描的其他包。