Sobes.tech
Junior — Middle

Kas on võimalik luua komponent, mis toimib kontrollorina, kasutades @Controller annotatsiooni?

sobes.tech AI

Vastus AI-lt

Jah, on võimalik rakendada komponenti, mis täidab kontrollori rolli ilma @Controller annotatsioonita Springis. @Controller on lihtsalt stereotüüp, mis aitab Springil tuvastada ja registreerida klassi kui kontrollori MVC kontekstis.

Alternatiivid:

  • Kasutada @Component või @Service annotatsiooni ning käsitsi konfigureerida marsruutimine konfiguratsiooni kaudu.
  • Spring WebFluxis saab kasutada funktsionaalseid marsruute (RouterFunction) ja käsitlejaid ilma @Controller annotatsioonita.
  • Võib programmiliselt luua kontrollori bean'i ja registreerida selle kontekstis.

Kuid ilma @Controller või sarnaste annotatsioonideta ei suuda Spring automaatselt siduda HTTP-päringuid klassi meetoditega. Seetõttu kasutatakse tavaliselt @Controller või @RestController mugavuse ja deklaratiivsuse huvides.

Näide ilma @Controller, kasutades funktsionaalset stiili Spring WebFluxis:

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

Seega on võimalik kontrollorit rakendada ka ilma annotatsioonita, kuid see nõuab teistsugust lähenemist marsruutimise ja päringute töötlemise osas.