Sobes.tech
Junior — Middle

Da li je moguće implementirati komponentu koja deluje kao kontroler bez korišćenja anotacije @Controller?

sobes.tech АИ

Одговор од АИ

Da, moguće je implementirati komponentu koja obavlja ulogu kontrolera bez korišćenja anotacije @Controller u Spring-u. Anotacija @Controller je samo stereotip koji pomaže Spring-u da prepozna i registruje klasu kao kontroler u MVC kontekstu.

Alternativa:

  • Koristiti anotaciju @Component ili @Service i ručno konfigurisati rutiranje putem konfiguracije.
  • U Spring WebFlux-u, možete koristiti funkcionalne rute (RouterFunction) i handler-e bez anotacije @Controller.
  • Možete kreirati bean kontrolera programatski i registrovati ga u kontekstu.

Međutim, bez @Controller ili sličnih anotacija, Spring ne može automatski povezati HTTP zahteve sa metodama klase. Zato se obično koriste @Controller ili @RestController radi jednostavnosti i deklarativnosti.

Primer bez @Controller, koristeći funkcionalni stil u Spring WebFlux:

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

Na ovaj način, kontroler se može implementirati i bez anotacije, ali to zahteva drugačiji pristup rutiranju i obradi zahteva.