首页 > 其他分享 >@Controller和@RestController的区别

@Controller和@RestController的区别

时间:2023-04-07 10:24:24浏览次数:36  
标签:RestController ResponseBody 区别 标识 Controller MVC 注解

引言

在Spring框架中,存在@Controller和@RestController这两个注解,相信很多人并不能很清晰地分辨它们。
今天,我来说明下它们的作用和使用场景。

1. @Controller

说起@Controller,不得不先谈谈@Component注解。
@Component注解是属于spring框架,它作用在类上,表明一个类会作为组件类,交给Spring的IoC容器管理,创建bean对象。

@Controller注解是@Component注解的一个特定类型,用来标识MVC分层架构中的控制层。

Spring对MVC分层组件的注解:

注解 含义
@Component 标识为组件,可以被注入到spring容器进行管理
@Controller MVC分层中,标识控制层
@Service MVC分层中,标识服务层
@Repository MVC分层中,标识持久层

2. @RestController

查看@RestController注解的源码,我们可以发现它就是一个@Controller注解,不过另外被@ResponseBody修饰。

@RestController 相当于 @Controller@ResponseBody 两者合并起来的作用。

3. @ResponseBody

查看@ResponseBody注解的源码,可以发现它可以作用在类和方法上。

  • 作用在类上
    表明该类的所有方法的返回值都直接进行提交,而不经过视图解析器,且返回值的数据自动封装为json的数据格式。

  • 作用在方法上
    表明该方法的返回值都直接进行提交,而不经过视图解析器,且返回值的数据自动封装为json的数据格式。

4. @Controller 和 @RestController的区别

  • 在SpringMVC中,@Controller 配合视图解析器,将响应返回给指定的jsp页面。

  • 对于Restful风格的请求,使用@RestController来标识该类中的方法,都是以json格式的数据返回响应。
    所以@RestController一般用在SpringBoot框架的项目中。

  • 对于@Controller标识的类,某个方法如果只需要返回字符串数据给前端页面,而不需要进行页面跳转,可以在方法上加上@ResponseBody注解。

标签:RestController,ResponseBody,区别,标识,Controller,MVC,注解
From: https://www.cnblogs.com/wheatear/p/17294902.html

相关文章

  • String split 坑 防止空 str.split(",")和str.split(",",-1)的区别
    str.split(",",-1);  packagecom.example;publicclassSplitTest{  publicstaticvoidmain(String[]args){    /**     *1.如果字符串最后一位有值,则没有区别,2.如果最后n位都是切割符,split("")不会继续切分,split("",-1)会继续切分......
  • vue3.0和2.0的区别
    Vue.js是一个渐进式JavaScript框架,Vue.js3.0相比于2.0有以下区别:更快:Vue.js3.0的渲染速度比2.0快了近30%。更小:Vue.js3.0的体积比2.0小了41%。更易维护:Vue.js3.0的代码结构更加清晰,更易于维护。更易于原生:Vue.js3.0的内部实现更加接近原生JavaScript,使得开发者更容易理......
  • flask之请求上下文分析之导出项目依赖-函数和方法的区别-threading.local对象-偏函数-
    目录flask之请求上下文分析之导出项目依赖-函数和方法的区别-threading.local对象-偏函数-flask整个生命执行流程--wtforms今日内容详细1请求上下文分析(源码:request原理)1.1导出项目的依赖1.2函数和方法1.3threading.local对象1.4偏函数1.5flask整个生命执行流程(1.1.4版本......
  • flask-day4——pipreqs模块、函数和方法的区别、threading.local对象、偏函数、flask
    目录一、请求上下文分析(源码:request原理)1.1导出项目的依赖(pipreqs模块)1.2函数和方法1.3threading.local对象代码演示自定义封装local,实现兼容线程和协程1.4偏函数1.5flask整个生命执行流程(1.1.4版本为例)二、wtforms(了解)三、作业1、为什么有了gil锁还要互斥锁2、什么是进程,线......
  • Android中asset文件夹和raw文件夹区别
    res/raw和assets的相同点:1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。res/raw和assets的不同点:1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java......
  • vue3中 toRefs和 toRef 的区别
    toRefs是为了避免对一个响应式对象解构的时候,解构后的每个属性不具有响应性toRef是为了针对单独获取某个对象的属性的时候保持响应性,从而单独对某个对象的属性进行响应式转化针对reactive或者ref创建的响应式对象都可以使用这两个api进行转化注意:toRefs只能对第一层......
  • 马哥课程回顾-----replicationcontroller
      实际工作中,很少单独操作Pod的,之所以k8s能够“自愈”,就是通过rc(ReplicationController)、rs(ReplicaSet)、Deployment等这些组件,再加上k8s核心controller工作机制来实现的。     扩容和缩容kubectlscalereplicationcontrollerrc-test--replicas=1     /......
  • argmax经过sigmoid和不经过sigmoid区别
    起因今天和同组讨论了一下网络输出时,在torch.argmax之前经过torch.sigmoid和不经过sigmoid的区别。主要起因是实验结果图像不同图1不经过sigmoid图2经过sigmoid我们发现经过sigmoid预测的图像更加严格(实验结果证明,经过sigmoid效果好),会将一些不经过sigmoid预测的前景分......
  • Kubernetes 集群监控 controller-manager & scheduler 组件
    一、问题描述在上篇Kubernetes集群监控kube-prometheus部署我们实现kube-prometheus的安装,我们可以看到监控指标大部分的配置都是正常的,只有两个没有管理到对应的监控目标,比如kube-controller-manager和kube-scheduler这两个系统组件。没有监控目标❝备注:controller-man......
  • URI URL的联系与区别
    URIURL的联系与区别  URLURL:(全称:UniformResourceLocator)统一资源定位符。它是一种表示,是互联网上标准资源的地址。 通过URL对互联网上的资源进行访问。URL的常见定义格式为:带方括号[]的为可选项scheme://host[:port#]/path/…/[;url-params][?query-string][#anchor......