4 回答
TA贡献1858条经验 获得超8个赞
@Controller是传统控制器中的用户,引入@RestController注解是为了简化RESTful Web服务的创建。这是一个结合了 @Controller 和 @ResponseBody 的便捷注解
@Controller 注释只是 @Component 类的特化,允许通过类路径扫描自动检测实现类。
@Controller 通常与请求处理方法上使用的 @RequestMapping 注释结合使用。
请求处理方法用@ResponseBody注释。此注释允许将返回对象自动序列化到 HttpResponse 中。
@RestController 是控制器的特殊版本。它包含 @Controller 和 @ResponseBody 注释,因此简化了控制器实现。
控制器使用 @RestController 注释进行注释,因此不需要 @ResponseBody。
控制器类的每个请求处理方法都会自动将返回对象序列化为 HttpResponse。
TA贡献1848条经验 获得超10个赞
仅仅因为@RestController
它是一个@Component
并不意味着您可以通过切换到更广泛的功能来实现相同的功能@Component
。即使添加了@ResponseBody
,您也无法实现等效的功能(如通过POST
不支持的请求方法所表示的)。
替换@Component
为@Controller
,因为 a与+@RestController
具有完全相同的功能。您还可以在 的元注释中看到这一点,您会看到它是元注释的,而不仅仅是。反过来,用 进行元注释。@Controller
@ResponseBody
@RestController
@Controller
@Component
@Controller
@Component
TA贡献1807条经验 获得超9个赞
都是用注解进行元注解的@Controller
注解。所有这些注释本质上都是针对特定用例的注释的专业化。该注解一般用于注册Spring bean。@RestController
@Service
@Component
@Component
@Component
该@Controller
注解即使是用@Component
inside 进行注解的,它也提供了完全不同的功能。通过使用此注解来注解一个类,我们实际上是在告诉 spring 扫描此类中的@RequestMapping
注解来注册 bean 以进行请求映射。当您仅使用注释时,不会发生这种情况@Component
。
当 spring 应用程序启动时,DispatcherServlet
将启用(这是一个在s 上RequestMappingHandlerMapping
RequestMappingHandlerAdapter
查找注释的处理程序映射)。因此,当请求到达调度程序 servlet 时,它会将其交给将uri 解析为控制器方法 bean。5.x@RequestMapping
@Controller
RequestMappingHandlerMapping
DispatcherServlet
HandlerMapping
注意:在旧版本的 spring 中,DefaultAnnotationHandlerMapping
spring 启用了此功能。
综上所述:
@Component
是任何 Spring 管理的组件或 bean 的通用构造型。@Repository
是持久层的构造型。@Service
是服务层的构造型。@Controller
是表示层(spring-MVC)的构造型。
该
@Controller
注释指示特定类充当控制器的角色。注解的基本目的
@Controller
是充当被注解类的构造型,表明其作用。调度程序将扫描此类带注释的类以查找映射方法,检测@RequestMapping
注释(请参阅下一节)。带注释的控制器 bean 可以使用调度程序上下文中的标准 Spring bean 定义来显式定义。然而,
@Controller
构造型还允许自动检测,与 Spring 2.5 对检测类路径中的组件类和自动注册它们的 bean 定义的一般支持保持一致。
TA贡献1842条经验 获得超21个赞
您不应该得到相同的行为,因为 @Component 更通用。它仅将您的类注册为 Spring Managed Bean。但是,@RestController 不仅将您的类注册为托管 bean,还进一步将其注册为对指定 URL 路径的 HTTP 调用的入口点。其他特定于层的注释(如 @Repository、@Configuration 等)也是如此
添加回答
举报