Spring Boot Postman 无法在控制器中找到方法

whhtz7ly  于 2023-03-12  发布在  Spring
关注(0)|答案(1)|浏览(185)

我有一个关于Sping Boot 的项目,我在对我的控制器执行简单的Get请求时遇到了麻烦。
这是我的控制器类的样子。

package com.team4.controllers;

@RestController
@RequestMapping("/king")
public class KingController {
    
    @Autowired 
    private KingRepository kingRepo;
    
    @GetMapping("/all")
    public List<King> list() {
        return kingRepo.findAll();
    }
    
    @GetMapping("/{id}")
    public King get(@PathVariable Long id) {
        return kingRepo.getReferenceById(id);
    }
    
    @PostMapping("/add")
    public King create(@RequestBody final King king) {
        return kingRepo.saveAndFlush(king);
    }
    
    @PutMapping("/update")
    public King update(@RequestBody final King king) {
        return kingRepo.saveAndFlush(king);
    }
    
    @DeleteMapping("/delete/{id}")
    public void delete(@PathVariable Long id) {
        kingRepo.deleteById(id);
    }

}

然而, Postman http://localhost:8080/king/all上的get请求给了我“时间戳”:“2023年3月7日T01:17:43.041+00:00”,“状态”:404,错误提示:“未找到”,“消息”:“无可用消息”,“路径”:“/国王/所有”
这是我的主类的样子

package com.team4;

@SpringBootApplication
@EntityScan( basePackages = {"com.team4.model.*"} )
@EnableJpaRepositories("com.team4.model.*")
@ComponentScan( basePackages = { "com.team4.model.*", "com.team4.controllers.*" } )

public class BoardGameProjectApplication {

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

    
    
}

如果我把一个方法放在这个类里, Postman 就可以访问它。我很困惑为什么它不为我的控制器做这件事。我该怎么办?
这两个类之间的唯一区别是它们所在的包。

flvlnr44

flvlnr441#

Spring找不到您的控制器,因为您强制它在com.team4.controllers下的子包中搜索,而不是在com.team4.controllers本身中搜索。

@ComponentScan( basePackages = { "com.team4.model.*", "com.team4.controllers.*" } )

@ComponentScan( basePackages = { "com.team4.model.*", "com.team4.controllers" } )

也许更好的是

@ComponentScan( basePackages = { "com.team4" } )

相关问题