@controller注解和@RestController注解详解

news2024/11/25 22:46:31

文章目录

      • 控制器
        • MVC控制器
        • REST 控制器
      • @controller
      • @RestController
      • 总结

控制器

MVC控制器

在了解这两种注解之前我们需要先知道控制器的概念,我们项目中常见的就是MVC控制器,MVC 是一种软件架构模式,它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这种分离有助于管理复杂的应用程序,并提高代码的可维护性和重用性。

  • 模型(Model):负责处理应用程序的数据逻辑。通常包含业务逻辑、数据访问层等。
  • 视图(View):负责显示用户界面。它是模型的可视化表示,可以是一个网页或其他形式的UI。
  • 控制器(Controller):作为模型与视图之间的中介,处理用户的输入,执行相应的业务逻辑,并更新模型或视图。
    在这里插入图片描述
    在Spring MVC框架中,@Controller 注解用来标记一个类为控制器,它可以处理HTTP请求并返回响应。这些控制器通常用于生成HTML页面,适合于传统的Web应用,在现在的前后端分离项目中已经不太适用。
REST 控制器

REST 是一种设计风格,而不是具体的实现。RESTful Web服务使用标准的HTTP方法(GET, POST, PUT, DELETE等)来操作资源。每个资源通过唯一的URL标识,客户端可以通过这个URL对资源进行创建、读取、更新和删除(CRUD)操作。

  • 资源(Resource):在REST中,任何可以被命名的信息都可以看作是一个资源,如用户、订单、评论等。
  • 表现层(Representation):资源的表现形式,比如JSON、XML等格式。
  • 状态转移(State Transfer):客户端和服务器之间通过交换资源的状态信息来进行交互。

在Spring框架中,@RestController 注解是用来标记一个类为RESTful风格的控制器。与 @Controller 不同的是,@RestController 自动添加了 @ResponseBody 注解,这意味着所有方法都将直接写入HTTP响应体中,而不需要经过视图解析器处理。因此,@RestController 通常用于构建API接口,返回的数据通常是JSON或XML格式,适合作为前后端分离架构中的后端服务。

@controller

传统的SpringMVC框架所带的注解,通过这个注解表明这个java类是一个控制器,可以对视图和数据进行操控,作为一个中间人才处理和展示数据,在现在的项目中已经不再适用,可以不用过于关注

@RestController

在上面的描述中已经知道了@RestController 自动添加了 @ResponseBody 注解,而这里的@ResponseBody即将所有的返回值自动装在了一个对象中,这些对象会被自动转换成JSON格式并写入到HTTP响应体中,所以通过@RestController控制器就只会返回对应的JSON数据,而不是像@controller一样需要同时返回数据和视图(也是是前端的代码);

总结

MVC控制器 主要用于传统的Web应用开发,其中涉及到视图渲染,最终目的是生成HTML页面供浏览器显示。
REST控制器 则主要用于提供API接口,支持前后端分离的架构,返回的数据通常是结构化的,如JSON或XML,由前端JavaScript框架或其他客户端消费。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2207582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言统计分析——气泡图

参考资料:R语言实战【第2版】 气泡图(bubble plot)用来展示三个定量变量间的关系:先创建一个二维散点图,然后用点的大小来代表第三个边变量的值。 我们可以使用symbols()函数来创建气泡图。该函数可以在指定的(x,y)坐标…

如何鉴定一段抗体序列的CDR区(CDR1、CDR2、CDR3)

愿武艺晴小朋友一定得每天都开心 如果有一批的抗体序列,可按下面的步骤来处理: (1)可以先处理为fasta的格式(或者不处理手动粘贴) >20B11 NIVLTQSPASLAVSLGQRATISCKASQSVDYDGDSYMNWYQQKPGQPPKLLIYAASNLESGIPARFSGSGSGTDFTLNIHPVEEEDAA…

华为启动鸿蒙原生应用开发者激励计划 12月31日前上架最高可获10万元

华为开发者官网今天发布了《鸿蒙原生应用开发者激励计划》的公告。此计划是华为给鸿蒙原生应用的开发者提供的现金及流量扶持的专属激励资源,鼓励开发者积极投入鸿蒙原生应用开发,加速应用上架,共创鸿蒙生态。 开发者需要在本计划要求的报名周…

深度学习:手写感知机

文章目录 前言感知机模型训练模型预测小结 前言 上面是一只猫,人类的大脑可以很轻松地识别出。人脑是如何识别的呢? 人类能够识别出这只猫,是因为这张图片具有猫的典型特征。例如,猫的耳朵、眼睛、猫须、嘴巴等独特的形态特征&am…

gcc学习

理论 在使用 GCC (GNU Compiler Collection) 进行 C 或 C 程序的编译时,可以将整个过程分为四个主要阶段:预处理、编译、汇编和链接。下面是每个阶段的命令示例: 1. 预处理-E 预处理阶段会处理所有的预处理指令(如 #include 和…

ArcGis JS天地图 暗色地图

方法一&#xff1a;使用css filter 在body下增加svg&#xff0c;并增加需要用到的滤镜&#xff0c;这边用到x-rays <svg id"svgfilters" aria-hidden"true" style"position: absolute; width: 0; height: 0; overflow: hidden"version"…

刷题 排序算法

912. 排序数组 注意这道题目所有 O(n^2) 复杂度的算法都会超过时间限制&#xff0c;只有 O(nlogn) 的可以通过 快速排序空间复杂度为 O(logn)是由于递归的栈的调用归并排序空间复杂度为 O(n) 是由于需要一个临时数组 (当然也需要栈的调用&#xff0c;但是 O(logn) < O(n) 的…

【华为】配置RIP协议

RIP&#xff08;Routing Information Protocol&#xff09;是一种内部网关协议&#xff08;IGP&#xff09;&#xff0c;主要用于小型网络中的动态路由。RIP有两个主要版本&#xff1a;‌RIPv1和‌RIPv2&#xff0c;它们之间存在一些关键区别&#xff1a; ‌分类支持‌&#xf…

利用FnOS搭建虚拟云桌面,并搭建前端开发环境(一)

利用FnOS搭建虚拟云桌面&#xff0c;并搭建前端开发环境 一 飞牛FnOS官方文档一、安装FnOS【Win11系统】1.下载VirtualBox2.下载FnOS镜像3.创建虚拟机4.启动完成后&#xff0c;会进入这样一个界面&#xff0c;这个基本上后续就后台了 本人在网上冲浪了很久&#xff0c;一直也没…

python pyqt5 +vtk 显示obj模型文件

python pyqt5 vtk 显示obj模型文件 准备代码参考 准备 名称版本python3.8.19pyqt55.15.9pyqt5-tools5.15.9.3.3pyqt5-sip12.15.0vtk9.3.1 代码 使用wsl2 和 XLaunch 配合pyqt5进行可视化是可行的。使用pip在conda环境中安装pyqt5相关组件。以下代码在 WSL2 的 Ubuntu 20.04 …

Java运算符逻辑控制

目录 一、运算符 1.1基本四则运算符&#xff08;加减乘除模&#xff09; 1.2增量运算符 1.3关系运算符 1.4自增、自减运算符 1.5逻辑运算符 1.6位运算符 1.7移位运算符 1.8条件运算符&#xff08;三目运算符&#xff09; 二、逻辑控制 2.1if语句 2.2switch语句 2.…

Docker 搭建mysql 连接超时问题,xxl-job启动mysql连接报错

1.本地连接Navicat报错信息&#xff0c;猜测是navicat默认连接超时导致的&#xff0c;后面换成idea一个插件虽然慢但连接上了 2013 - Lost connection to MySQL server at reading initial communication packet 2.启动xxl-job会报错&#xff0c;网上有人mysql驱动与数据库不匹…

【高频SQL基础50题】31-35

又到SQL。 目录 1.查询结果的质量和占比 2.求关注者的数量 3.指定日期的产品价格 4.好友申请 II &#xff1a;谁有最多的好友 5.按日期分组销售产品 1.查询结果的质量和占比 聚合题。 # Write your MySQL query statement below SELECT t1.query_name,ROUND((SUM(t1.r…

问题记录(个人)

备注&#xff1a; 在7月10日记录之前遇到的问题及解决方法: 一&#xff1a;常见的访问问题&#xff1a; 403 Forbidden&#xff1a;&#xff08;未有请求权限&#xff09; 表示服务器理解请求但是拒绝执行它。这通常是由于服务器上的文件或资源没有正确的读、写或执行权限&…

【从零开始的LeetCode-算法】3164.优质数对的总数 II

给你两个整数数组 nums1 和 nums2&#xff0c;长度分别为 n 和 m。同时给你一个正整数 k。 如果 nums1[i] 可以被 nums2[j] * k 整除&#xff0c;则称数对 (i, j) 为 优质数对&#xff08;0 < i < n - 1, 0 < j < m - 1&#xff09;。 返回 优质数对 的总数。 示…

python画图|多个Y轴分列右侧

【1】引言 前述python画图学习中&#xff0c;已经探索过X轴和Y轴的共享&#xff0c;可通过下述链接直达&#xff1a; 西猫雷婶-CSDN博客 但现实的画图实践中总会有新的要求&#xff0c;之前将所有轴合到一起的形式可能不再适用&#xff0c;因此&#xff0c;很有必要探索多个…

下一代安全:融合网络和物理策略以实现最佳保护

在当今快速发展的技术环境中&#xff0c;网络和物理安全融合变得比以往任何时候都更加重要。随着物联网 (IoT) 和工业物联网 (IIoT) 的兴起&#xff0c;组织在保护数字和物理资产方面面临着独特的挑战。 本文探讨了安全融合的概念、说明其重要性的实际事件以及整合网络和物理安…

Pandas处理时间序列之光谱分析与聚类

import matplotlib.pylab as plt %matplotlib inline import numpy as np from numpy import fft import pandas as pd 一、光谱分析 • 将时间序列分解为许多正弦或余弦函数的总和 • 这些函数的系数应该具有不相关的值 • 对正弦函数进行回归 光谱分析应用场景 基于光谱的…

Windows 修改 Alt+Tab 键 切换 新版 Microsoft Edge 单个标签页/窗口

Windows 10 修改 AltTab 键 切换 新版 Microsoft Edge 单个标签页/窗口 解决方案&#xff1a;在 Windows 设置 的搜索框中 搜索 alt&#xff0c;选择 选择按下 AltTab 时显示的窗口和选项卡&#xff0c;将 按 Alt Tab 将显示 选为 仅打开的窗口 详细过程&#xff1a; 在 Win…

打造高效3D打印利器:STEP转STL格式转换器

随着3D打印技术的日益普及&#xff0c;越来越多的设计师和工程师开始使用三维建模软件来创建复杂的产品模型。然而&#xff0c;不同的软件往往采用不同的文件格式&#xff0c;这给模型的共享和打印带来了诸多不便。本文将重点介绍STEP格式转STL格式的转换器&#xff0c;帮助大家…