Java Spring引导在控制器api上获取404错误

Java Spring引导在控制器api上获取404错误,java,spring-boot,Java,Spring Boot,我正在学习有关Sprint引导的教程,并创建了一个实践应用程序。在我的控制器类中,我将映射放入其中,当我运行应用程序时,我在所有api上不断收到404个错误。我循序渐进地学习了教程,但我不想在不测试api是否正常工作的情况下继续学习。我试图改变端口,以防引起问题,但我想可能是有什么东西阻塞了,这就是为什么我得到404错误 控制器类 @RestController @RequestMapping("/api/book") public class BookController

我正在学习有关Sprint引导的教程,并创建了一个实践应用程序。在我的控制器类中,我将映射放入其中,当我运行应用程序时,我在所有api上不断收到404个错误。我循序渐进地学习了教程,但我不想在不测试api是否正常工作的情况下继续学习。我试图改变端口,以防引起问题,但我想可能是有什么东西阻塞了,这就是为什么我得到404错误

控制器类

@RestController
@RequestMapping("/api/book")
public class BookController {
    
    private final BookService bookService;
    
    public BookController(BookService bookService) {
        this.bookService = bookService;
    }
    
    @GetMapping("/all")
    public ResponseEntity<List<Book>> getAllBooks() {
        List<Book> books = bookService.findAllBooks();
        return new ResponseEntity<>(books, HttpStatus.OK);
    }
    
    @GetMapping("/find/{id}")
    public ResponseEntity<Book> getBookByID(@PathVariable("id") Long id) {
        Book book = bookService.findBookByID(id);
        return new ResponseEntity<>(book, HttpStatus.OK);
    }
    
    @PostMapping("/add")
    public ResponseEntity<Book> addBook(@RequestBody Book book) {
        Book newBook = bookService.addBook(book);
        return new ResponseEntity<>(newBook, HttpStatus.CREATED);
    }
    
    @PutMapping("/update")
    public ResponseEntity<Book> updateBook(@RequestBody Book book) {
        Book updateBook = bookService.updateBook(book);
        return new ResponseEntity<>(updateBook, HttpStatus.OK);
    }
    
    @DeleteMapping("/delete/{id}")
    public ResponseEntity<?> deleteBook(@PathVariable("id") Long id) {
        bookService.deleteBook(id);
        return new ResponseEntity<>(HttpStatus.OK);
    }
}
主要

邮递员的输出

{
    "timestamp": "2021-02-21T16:33:50.027+00:00",
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/api/book/add"
}
更新

URL:
http://localhost:8080/api/book/add

使用Post请求和所选JSON,这是我在JSON正文中的内容

{
    "bookName": "The Hunger Games",
    "authorLastName": "Collins",
    "authorFirstName": "Suzanne",
    "isbn": "9780439023481",
    "genre": "young adult"
}

如果您的其他包层次结构位于带有
@SpringBootApplication
注释的主应用程序下方,则隐式组件扫描将覆盖您

如果其他包中有bean/组件不是主包的子包,则应手动将它们添加为
@ComponentScan

@ComponentScan(basePackages = "com.*")
@SpringBootApplication 
对于多个路径,您可以进行如下所述的更改

@ComponentScan({"com.x","com.y"})

相应地更改软件包名称。

我不知道为什么在发布问题后,这篇帖子会被否定。我确实看了别人的帖子,尝试了那里的解决方案,但没有luckCan u向我们显示邮递员代码和url?我认为spring没有扫描您的@RestController类,因此这些端点不可用,所以请尝试将它们包含在
@SpringBootApplication@ComponentScan(basePackages=“com.*)中
change
com
用你的项目包名我会试试看,我想我读到
@SpringBootApplication
已经包含了
@ComponentScan
,可能我误解了我添加了
@ComponentScan(basePackages=“controller.*)
,但没有用。哇,明白了。这是因为我在eclipse中创建的包不在主包下。所以我重新组织了一切,现在一切正常了。我没有添加componetScan,因为我重新组织了主包下的所有内容。我不知道为什么它一开始没有这么做。感谢您提供有关
@ComponentScan
{
    "bookName": "The Hunger Games",
    "authorLastName": "Collins",
    "authorFirstName": "Suzanne",
    "isbn": "9780439023481",
    "genre": "young adult"
}
@ComponentScan(basePackages = "com.*")
@SpringBootApplication 
@ComponentScan({"com.x","com.y"})