Sobes.tech
Junior — Middle

Je možné implementovat komponentu, která funguje jako kontroler, bez použití anotace @Controller?

sobes.tech AI

Odpověď od AI

Ano, je možné implementovat komponentu, která bude plnit roli kontroléru, aniž by bylo použito anotace @Controller ve Springu. Anotace @Controller je pouze stereotyp, který pomáhá Springu detekovat a registrovat třídu jako kontrolér v kontextu MVC.

Alternativy:

  • Použití anotace @Component nebo @Service a ruční konfigurace směrování přes konfiguraci.
  • V Spring WebFlux lze použít funkční routy (RouterFunction) a zpracovatele bez anotace @Controller.
  • Může být vytvořen bean kontroléru programově a zaregistrován v kontextu.

Nicméně bez @Controller nebo podobných anotací Spring nedokáže automaticky spojit HTTP požadavky s metodami třídy. Proto se obvykle používají @Controller nebo @RestController pro pohodlí a deklarativnost.

Příklad bez @Controller, s použitím funkčního stylu ve Spring WebFlux:

@Bean
public RouterFunction<ServerResponse> route() {
    return RouterFunctions.route()
        .GET("/hello", request -> ServerResponse.ok().bodyValue("Hello World"))
        .build();
}

Tímto způsobem lze implementovat kontrolér i bez anotace, ale vyžaduje to jiný přístup k routování a zpracování požadavků.