Sobes.tech
Junior — Middle

É possível implementar um componente que funcione como controlador sem usar a anotação @Controller?

sobes.tech IA

Resposta da IA

Sim, é possível implementar um componente que desempenhe o papel de controlador sem usar a anotação @Controller no Spring. A anotação @Controller é simplesmente um estereótipo que ajuda o Spring a detectar e registrar a classe como controlador no contexto MVC.

Alternativas:

  • Usar a anotação @Component ou @Service e configurar manualmente o roteamento através da configuração.
  • No Spring WebFlux, pode-se usar rotas funcionais (RouterFunction) e manipuladores sem a anotação @Controller.
  • Pode-se criar um bean de controlador programaticamente e registrá-lo no contexto.

No entanto, sem @Controller ou anotações semelhantes, o Spring não poderá associar automaticamente as requisições HTTP aos métodos da classe. Portanto, geralmente, @Controller ou @RestController são usados por conveniência e para maior clareza.

Exemplo sem @Controller, usando estilo funcional no Spring WebFlux:

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

Dessa forma, é possível implementar um controlador sem a anotação, mas isso requer uma abordagem diferente para o roteamento e o tratamento de requisições.