我是learinf春季靴子,我开发了belwo简单示例。如图所示,我正在使用两个主要注释@SpringApplication和@RestController。 当我使用邮递员运行Web服务并通过
在后端和前端之间进行通信时http:://localhost:8080
我可以使用@RequestMapping注释的所有方法
我想咨询一下如何将控制器拆分为另一个类。换句话说,我不希望使用@SpringApplication注释的类包含任何 用@RequestMapping注释的类。
例如,我想分别为GreetingText和Greeting创建两个类。
在下面的尝试部分中,是我的尝试,但出现了以下错误:
//Could not autowire no beans of string
请让我知道:
1-如何在另一个类中拆分“ Greeting”和“ GreetingText”,以便我将其称为follwo:
http://localhost:8080/
http://localhost:8080/GreetingText?
2-为什么使用自动装配时,我收到以下张贴的错误
//Could not autowire no beans of string
代码:
@SpringBootApplication
@RestController
public class GreetingApplicationModelObject {
public static void main(String[] args) {
SpringApplication.run(GreetingApplicationModelObject.class, args);
}
@RequestMapping("/")
public String GreetingText() {
return "Frontend Greeting";
}
@RequestMapping("/greetingWithParams")
public Greeting Greeting(@RequestParam(value = "val", defaultValue = "no_val_from_front-end") String val) {
return new Greeting(getRandomValue(), val);
}
public int getRandomValue() {
Random r = new Random();
return r.nextInt(1000);
}
}
尝试:
@Autowired
private String str;
//Could not autowire no beans of string
@Autowired
GreetingFromDeuController(String str) {
this.str = str;
}
@Autowired
public String getGreetingFromDeu() {
return this.str;
}
}
答案 0 :(得分:1)
您可以根据需要创建任意数量的RestController
类。
@RestController
class GreetingController {
@RequestMapping("/")
public String greetingText() {
return "Greeting";
}
}
这些类将被Spring自动提取。
答案 1 :(得分:0)
Michael是100%正确的人,但是为了更详细地回答您的问题,bean是从项目中的组件扫描中提取的。
您的@SpringBootApplication
应该在项目的根包中,在任何父包中都不应定义任何bean。
要定义将由组件扫描拾取的bean,有许多类级别的注释将使该类的bean。
一些常见的是
@Configuration // application configurations
@Component // a general bean that you can use anywhere in your project
@RestController // one or more exposed API endpoints
@Service // a service bean for business logic of the application
@Respository // a data access bean
但是还有更多。
我见过的一件常见的事情是下面的包结构
com.test.spring
MainApplication.java <-- @SpringBootApplication
controller
GreetingController.java <-- @RestController
config
AppConfig.java <-- @Configuration
service
GreetingService.java <-- interface, no component
impl
GreetingServiceImpl.java <-- @Service
dao
GreetingRepsository <-- @Repository
对于您的应用程序,您似乎并不需要所有这些,这只是一个示例
您还可以使用指定实现或类似方法的方法来创建bean。我在以前的
中使用过类似的方法@Configuration
public class AppConfig {
@Bean
public String activeProfile(@Value("{spring.profiles.active}" profile) {
return profile;
}
}
Baeldung始终是很好的资源:https://www.baeldung.com/spring-bean-annotations