Sobes.tech
Junior — Middle

Ar įmanoma įgyvendinti komponentą, kuris veikia kaip kontroleris, nenaudojant @Controller anotacijos?

sobes.tech AI

Atsakymas iš AI

Taip, galima įgyvendinti komponentą, kuris atlieka kontrolerio vaidmenį be @Controller anotacijos Spring'e. @Controller yra tik stereotipas, kuris padeda Spring aptikti ir registruoti klasę kaip kontrolerį MVC kontekste.

Alternatyvos:

  • Naudoti @Component arba @Service anotaciją ir rankiniu būdu sukonfigūruoti maršrutizaciją per konfigūraciją.
  • Spring WebFlux galima naudoti funkcines maršrutus (RouterFunction) ir handler'ius be @Controller anotacijos.
  • Gali būti sukurtas kontrolerio bean'as programiškai ir registruotas kontekste.

Tačiau be @Controller ar panašių anotacijų, Spring negalės automatiškai susieti HTTP užklausų su klasės metodais. Todėl dažnai naudojami @Controller arba @RestController patogumui ir deklaratyvumui.

Pavyzdys be @Controller, naudojant funkcionalų stilių Spring WebFlux:

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

Taip, galima įgyvendinti kontrolerį ir be anotacijos, tačiau tai reikalauja kitokio požiūrio į maršrutizaciją ir užklausų apdorojimą.