Sobes.tech
Junior — Middle

Je možné implementovať komponentu, ktorá funguje ako kontrolór, bez použitia anotácie @Controller?

sobes.tech AI

Odpoveď od AI

Áno, je možné implementovať komponent, ktorý bude plniť úlohu kontroléra bez použitia anotácie @Controller v Spring. Anotácia @Controller je len stereotyp, ktorý pomáha Springu detekovať a registrovať triedu ako kontrolér v kontexte MVC.

Alternatívy:

  • Použitie anotácie @Component alebo @Service a manuálne nakonfigurovať routovanie cez konfiguráciu.
  • V Spring WebFlux môžete použiť funkčné trasy (RouterFunction) a handler-y bez anotácie @Controller.
  • Môžete vytvoriť bean kontroléra programovo a zaregistrovať ho v kontexte.

Avšak bez @Controller alebo podobných anotácií Spring nedokáže automaticky spojiť HTTP požiadavky s metódami triedy. Preto sa zvyčajne používajú @Controller alebo @RestController pre pohodlie a deklaratívnosť.

Príklad bez @Controller, využívajúc funkčný štýl v Spring WebFlux:

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

Týmto spôsobom je možné implementovať kontrolér aj bez anotácie, ale vyžaduje to iný prístup k routovaniu a spracovaniu požiadaviek.