Rest 控制器仅适用于应用程序 class
Rest Controller works just for Application class
我正在尝试使用 rest-api 执行 getmapping 方法,它将 return 作为本地主机上的 JSON:8080。当我从默认应用程序 class 它工作得很好,但是当我将此功能移动到另一个 class 时,什么也没有发生。有人可以帮我解决这个问题吗?
原因1:默认Spring的组件扫描无法找到你的@RestController
组件,你可以尝试直接@ComponentScan
原因 2:您需要使用 @RequestMapping
/@GetMapping("url")
或两者为您的 @GetMapping
指定端点。
问题是您的包结构阻止了 BookController
组件扫描。
当您在包 com.xenon.myspringbootapp
中定义 @SpringBootApplication
时,该包和嵌套包中的任何内容都可以进行组件扫描,这将从 @(Rest)Controller
中注册一个 bean 并且其他刻板印象。
因为 BookController
在 book
中定义,它在组件扫描包之外,因此不会被您的 @SpringBootApplication
注释扫描组件。
有关 Spring 引导应用程序的包结构的更多最佳实践,请参阅 the reference docs。
要解决此问题,有两种选择可以扫描您的 class 组件。
第一个(也是我推荐的方法)只是重组您的包,以便 @SpringBootApplication
class 位于您的应用程序包的“基础”。例如,您可以将 book.BookController
移动到 com.xenon.myspringbootapp.book.BookController
.
第二个是更改组件扫描配置以包含您的 book
包。您可以在 @SpringBootApplication
注释本身上执行此操作:
@SpringBootApplication(scanBasePackages = {
"com.xenon.myspringbootapp",
"book"
})
或者,定义一个不同的 @ComponentScan
。请注意,使用 @ComponentScan
注释的配置 class 仍必须对其自身进行组件扫描。
@SpringBootApplication
public class MySpringBootAppApplication {
@Configuration
@ComponentScan("book")
public static class MyBookComponentScanConfiguration {}
public static void main(String[] args) {
SpringApplication.run(MySpringBootAppApplication.class);
}
}
我正在尝试使用 rest-api 执行 getmapping 方法,它将 return 作为本地主机上的 JSON:8080。当我从默认应用程序 class 它工作得很好,但是当我将此功能移动到另一个 class 时,什么也没有发生。有人可以帮我解决这个问题吗?
原因1:默认Spring的组件扫描无法找到你的@RestController
组件,你可以尝试直接@ComponentScan
原因 2:您需要使用 @RequestMapping
/@GetMapping("url")
或两者为您的 @GetMapping
指定端点。
问题是您的包结构阻止了 BookController
组件扫描。
当您在包 com.xenon.myspringbootapp
中定义 @SpringBootApplication
时,该包和嵌套包中的任何内容都可以进行组件扫描,这将从 @(Rest)Controller
中注册一个 bean 并且其他刻板印象。
因为 BookController
在 book
中定义,它在组件扫描包之外,因此不会被您的 @SpringBootApplication
注释扫描组件。
有关 Spring 引导应用程序的包结构的更多最佳实践,请参阅 the reference docs。
要解决此问题,有两种选择可以扫描您的 class 组件。
第一个(也是我推荐的方法)只是重组您的包,以便 @SpringBootApplication
class 位于您的应用程序包的“基础”。例如,您可以将 book.BookController
移动到 com.xenon.myspringbootapp.book.BookController
.
第二个是更改组件扫描配置以包含您的 book
包。您可以在 @SpringBootApplication
注释本身上执行此操作:
@SpringBootApplication(scanBasePackages = {
"com.xenon.myspringbootapp",
"book"
})
或者,定义一个不同的 @ComponentScan
。请注意,使用 @ComponentScan
注释的配置 class 仍必须对其自身进行组件扫描。
@SpringBootApplication
public class MySpringBootAppApplication {
@Configuration
@ComponentScan("book")
public static class MyBookComponentScanConfiguration {}
public static void main(String[] args) {
SpringApplication.run(MySpringBootAppApplication.class);
}
}