我正在构建一个带有CRUD功能的Spring-REST-API来创建、阅读、更新和删除MongoDB数据库中的书籍。
BackendBookLibraryApplication.java in main > java > com.lena.backendbooklibrary
BookController.java in main > java > com.lena.backendbooklibrary.controllers
package com.lena.backendbooklibrary;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BackendBookLibraryApplication {
public static void main(String[] args) {
SpringApplication.run(BackendBookLibraryApplication.class, args);
}
}
package com.lena.backendbooklibrary.controllers;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/v1/books")
public class BookController {
@GetMapping
public String getAllBooks() {
return "All books";
}
}
当我运行我的应用程序时,路径http://localhost:8080/api/v1/books传递了一个404。我不知道为什么SpringBootApplication找不到我的REST控制器,因为它们在同一个包中(控制器在一个子包中,但这应该没有问题)。在我的控制台中没有任何错误。
我试着用下面的方法来界定这个问题:
1.使用@RestController注解BackendBookLibraryApplication并在其中实现GET方法:这很管用
package com.lena.backendbooklibrary;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
@RequestMapping("/api/v1/books")
public class BackendBookLibraryApplication {
public static void main(String[] args) {
SpringApplication.run(BackendBookLibraryApplication.class, args);
}
@GetMapping
public String getAllBooks() {
System.out.println("BackendBookLibraryApplication: getAllBooks()");
return "All books";
}
}
1.将BookController从子包移动到与BackendBookLibraryApplication完全相同的包com. lena. backendbooklibrary中:这是行不通的
1.此外,还使用@ComponentScan(basePackageClasses = BookController.class)对BackendBookLibraryApplication进行了注解,不过我认为这应该在@SpringBootApplication-注解中进行总结:这是行不通的
有人知道问题出在哪里吗?如果有SpringMaven能帮助我,那就太好了。谢谢!
1条答案
按热度按时间wz3gfoph1#
您可能使用过
spring boot 3.0.3
版本,并受到此issue的影响。出现在
spring boot 3.0.3
版本中的问题不允许为您请求的path
公开您的RestController
,原因是当您的应用程序所在的目录有空格或特殊字符时出现一些问题。这是您的控制器所在的路径的解码问题,因此无法正确注册。如果是目前的情况,您可以通过迁移到
spring boot 3.0.2
版本或spring boot 3.0.4
版本来解决此问题。