Spring MVC(响应 + 状态码)

文章目录

  • 一、@RestController VS @Controller VS @ResponseBody
    • 1.1 关于元注解
    • 1.2 @Controller
    • 1.3 @ResponseBody
    • 1.4 @RestController
  • 二、响应
    • 2.1 Spring 对于响应的设置
    • 2.2 返回静态页面
    • 2.3 返回HTML代码片段
    • 2.4 返回JSON
    • 2.5 设置HTTP状态码
    • 2.6 设置响应部分的Header
  • 二、状态码
    • 2.1 HTTP 状态码
    • 2.2 业务状态码

一、@RestController VS @Controller VS @ResponseBody

1.1 关于元注解

  1. 什么是元注解:可以被其他注解使用,用来描述该注解基本信息的注解
  2. 有什么
    • @Target:该注解可以修饰什么,指应用范围
      • ElementTYPE.TYPE:表示该注解可以修饰【类和接口】
      • ElementTYPE.METHOO:表示该注解可以修饰【方法】
    • @Retention:注解的生命周期
      • SOURCE:代码阶段,表示该注解只活在代码阶段,一编译注解就消失了
      • CLASS:编译阶段
      • RUNTIME:运行阶段
    • @Document:文档。我们去编译时,是否要保留JDK、注释之类的东西

1.2 @Controller

  1. 作用
    • 让Spring帮我们管理代码:Spring是一个容器,容器就是可以放东西的。该注解可以让我们把该代码交给Spring,由Spring帮我们管理(后续如果人要访问对应路径,Spring能意识到)
    • 返回视图:视图就是指前端页面

1.3 @ResponseBody

  1. 为什么要在方法上加上这个注解:因为现在用的是@Controller,即返回视图,此时就会去寻找“这是返回数据”这个视图,但是static里并没有该视图,故如果不加@ResponseBody表示这是返回数据,就会报404错误
  2. 关于字符集设置:Spring已经帮我们进行了字符集相关的处理,返回中文不需要再像Servlet一样,设置字符集了
@Controller
@RequestMapping("/param")
public class ParamController {@ResponseBody@RequestMapping("/responseData")public String responseData(){return "这是返回数据";}
}

在这里插入图片描述

1.4 @RestController

  1. 场景
    • 在前后端未分离之前,根据MVC架构,我们确实是使用@Controller注解返回视图。但随着时代发展,前后端分离,后端程序员不再进行相关的前端开发,只需要返回前端需要的数据即可
    • 返回数据就是依靠@ResponseBody注解,我们又同时需要@Controller把代码给Spring管理,这俩加起来就是@RestController注解
  2. 作用:把代码交给Spring管理(@Controller) + 返回数据(@ResponseBody)
    • 类注解情况:修饰的类下的方法全部返回数据
    • 方法注解情况:修饰的方法全部返回数据
      在这里插入图片描述
  3. 其他写法:用两个注解写
    • 当存在多个注解时,注解的顺序没有关系,可以随意写
      在这里插入图片描述

二、响应

2.1 Spring 对于响应的设置

  1. 不用手动设置返回类型:我们不需要像使用Servlet那样,专门对要返回的类型进行描述,Spring已经帮我们处理好了,这是依靠于Spring的解析器。
  2. Spring解析器:Spring会有各种解析器用来判断要返回的数据是哪个类型,能不能转换,如果该解析器无法转换就会换下个解析器,直到能选定一个为止。
  3. 落实到具体类型上:可以自己尝试测试一下
    • 当我们的接口返回的是【String/Integer之类】的,content-Type是【text/html】
    • 当我们的接口返回的【是对象/Map之类】的,content-Type是【application/json】

2.2 返回静态页面

  1. 静态页面放在哪:static目录下
  2. 关于访问静态页面:static目录下的静态文件可以直接访问
    • 直接打开该文件:相当于是用文件资源管理器来打开
    • 利用网络来访问:使用浏览器来访问,输入【127.0.0.1:8080/index.html】 类似的路径即可
  3. 如何返回
    • 注解:因为要返回视图而非数据,所以使用@Controller注解
    • 请求方法:Get
    • 返回的文件:文件前面要加“/”
@Controller
@RequestMapping("/param")
public class ParamController {@RequestMapping("/index")public String index(){return "/index.html";}
}

2.3 返回HTML代码片段

  1. 方法:返回的数据中如果包含html标签,会直接被浏览器解析
  2. 如果只是想展示这串数据:用HTML的方法转义<>
@RestController
@RequestMapping("/param")
public class ParamController {@RequestMapping("/returnHTML")public String returnHTML(){return "<h1>返回了h1标签</h1>";}
}

2.4 返回JSON

  1. 方法:当方法返回的数据是对象/Map等时,Spring MVC会自动设置返回的content-Type为 【application/json】
@RestController
@RequestMapping("/param")
public class ParamController {@RequestMapping("/returnJSON")public Person returnJSON(){Person person = new Person();person.setUsername("zhangsan");person.setAge(19);return person;}
}

2.5 设置HTTP状态码

  1. 设置的HTTP状态码不影响页面的展示
  2. 设置方法:使用Servlet原生的方法(设置HTTP状态码操作不常用,故而Spring未提供注解)
@RestController
@RequestMapping("/param")
public class ParamController {@RequestMapping("/setStatus")public String setStatus(HttpServletResponse response){response.setStatus(404);return "ok";}
}

2.6 设置响应部分的Header

  1. 使用场景:虽然我们可以通过主体传大部分数据,使用Header传递数据的场景不是很多。但在一些特殊场景下,还是需要用的,比如鉴权(根据用户权限提供服务)
  2. 如何设置:@RequestMapping 注解中的produces属性
    • 注意虽然能设置,但也是要求【能转】的,不然会报错
@RestController
@RequestMapping("/param")
public class ParamController {@RequestMapping(value = "/setHeader", produces = "application/json;charset=utf-8")public String setHeader(){return "{‘username': 'zhangsan'}";}
}
  1. 关于utf8字符集的写法:不分大小写,utf8,utf-8、UTF-8、UTF8这四种方法都可以写
  2. 关于@RequestMapping注解
    在这里插入图片描述

二、状态码

2.1 HTTP 状态码

  1. 由谁定义:由HTTP返回,表示HTTP状态
  2. 与页面的关系:与页面能否正常展示无关
    • 我们可以在后端手动设置状态码,此时哪怕设置的状态码是404,只要代码正确,页面也依旧能正常展示
  3. 分类
    • 2XX:成功
    • 3XX:重定向
    • 4XX:客户端错误
    • 5XX:服务端错误

2.2 业务状态码

  1. 由谁定义:由后端自定义,我们通常会用一个其他的字段来表示
  2. 作用:使前端可以根据不同的业务状态码执行不同的操作
    • 解析:在HTTP响应成功的情况下,我们可以把业务的响应结果分为不同的状态。比如登录时,密码正确返回200,密码错误返回-1。

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

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

相关文章

小红书孕妇宝妈暴力拉新玩法,每日两小时,单日收益500+

哎呀&#xff0c;你好呀&#xff0c;亲爱的小伙伴们&#xff01;我今天心血来潮&#xff0c;想和你们分享一个超级棒的方法&#xff0c;这个方法我亲自试过&#xff0c;超级有效&#xff01;就是在小红书上针对孕妇和宝妈们进行引流的方法。听起来是不是很有趣呀&#xff1f;&a…

Excel表格内容误删未保存怎么找回?5种XLS文件恢复有效方法

在繁忙的工作中Excel表格作为数据处理的重要工具&#xff0c;承载了众多关键信息。然而误删未保存的Excel内容往往让人措手不及。今天我将为大家分析Excel表格内容误删未保存的可能原因&#xff0c;并提供五个免费实用的解决方案&#xff0c;助你轻松找回误删的XLS文件数据。 一…

贝努利贝叶斯算法

基本用法 完整代码&#xff1a; from sklearn.naive_bayes import BernoulliNB from sklearn.datasets import make_blobs from sklearn.model_selection import train_test_split# 生成数据 X, y make_blobs(n_samples500, centers5, random_state8) X_train, X_test, y_tr…

什么是蜜罐,在当前网络安全形势下,蜜罐能提供哪些帮助

在当前的互联网时代&#xff0c;网络安全威胁日益严峻&#xff0c;攻击手段层出不穷。为了应对这些威胁&#xff0c;网络安全专家们不断探索新的防御手段&#xff0c;在过去的几年里&#xff0c;一种更加积极主动的网络安全方法正在兴起。蜜罐技术便是这样一种备受瞩目的主动防…

打包conda环境的两种方法:conda env export和Conda-Pack

打包conda环境的两种方法&#xff1a;conda env export和Conda-Pack 搭建项目环境可能是整个开发过程中最让人头疼的部分了。如何把我们辛辛苦苦搭建的环境打包起来&#xff0c;万一环境崩了还能迅速恢复&#xff0c;或者让别人能轻松地复制同样的设置呢&#xff1f; 今天&am…

数仓架构之为什么要进行数仓分层

数仓分层这个概念想必大家都很熟悉&#xff0c;不管是在实际的开发工作当中会用的&#xff0c;还是在面试官面试你的时候会问到&#xff1a;你之前的项目是按照什么分层的&#xff0c;分哪几层&#xff0c;数仓分层有什么好处&#xff0c;举个栗子说说。 简而言之&#xff0c;…

[Cocos Creator 3.5赛车游戏]第3节 新建项目

环境已经配置好&#xff0c;现在您将真正的开始开发您的项目&#xff0c;开发项目的第一步是新建项目。所以现在请关闭上一个步骤打开的Cocos Creator窗口&#xff0c;回到CocosDashboard&#xff0c;点击“新建”按钮&#xff1a; 选择“模板”选项卡&#xff0c;因为您即将开…

视频监控平台智能边缘分析一体机视频存储平台打手机检测算法

智能边缘分析一体机的打手机检测算法是一种集成了先进图像处理、计算机视觉和人工智能技术的解决方案&#xff0c;专门用于实时监测和识别监控场景中的打手机行为。 在提到“打手机检测算法”时&#xff0c;可能是指一种能够识别和检测使用手机行为的算法。这种算法可以应用于多…

29.IO流(了解)

1. C语言的输入与输出 ​ C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键 盘)读取数据&#xff0c;并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的…

在面对各种问题时,我们应该如何进行数据分析

python数据分析汇总 前言一、对比分析概念特征类型案例Matplotlib的颜色字母对照表解决遇到未知函数 二、相关性分析概念类型案例一案例二 三、时间序列分析概念类型案例 四、回归分析概念类型案例一案例二案例三 五、决策树概念计算过程案例 六、主成分分析概念计算过程案例 七…

武汉星起航推出亚马逊一站式孵化服务,助力卖家轻松拓展全球市场

亚马逊作为全球最大的电商平台之一&#xff0c;以其全球化的销售平台和完善的物流体系&#xff0c;吸引了众多卖家的目光。通过亚马逊平台&#xff0c;卖家可以轻松地将产品销往世界各地&#xff0c;无需担心复杂的国际贸易流程。而在这个充满机遇的市场中&#xff0c;武汉星起…

IDEA中开发并部署运行WEB项目

IDEA中开发并部署运行WEB项目 1 WEB项目的标准结构2 WEB项目部署的方式3 IDEA中开发并部署运行WEB项目3.1 部署步骤3.2 IDEA关联本地Tomcat 4 IDEA创建web工程5 IDEA部署-运行web项目6 IDEA部署并运行项目的原理 1 WEB项目的标准结构 一个标准的可以用于发布的WEB项目标准结构如…

安防监控视频平台智能边缘分析一体机视频存储系统客流统计检测算法

智能边缘分析一体机的客流统计检测算法是一种基于人工智能与边缘计算技术的解决方案&#xff0c;专门设计用来实时、准确地统计通过特定区域的人流量。这项技术广泛应用于零售、交通、场馆管理、智慧城市等领域&#xff0c;以帮助管理者更好地理解顾客行为、优化资源配置、提升…

RS232/RS485信号转12路模拟信号 YL34隔离D/A转换器 4-20mA/0-5V/0-10V/0-20mA/0-25mA

特点&#xff1a; ● RS-485/232接口&#xff0c;隔离转换成12路标准模拟信号输出 ● 可选型输出4-20mA或0-10V控制其他设备 ● 模拟信号输出精度优于 0.2% ● 可以程控校准模块输出精度 ● 信号输出 / 通讯接口之间隔离耐压3000VDC ● 宽电源供电范围&#xff1a;10 ~ …

什么是控制,什么是控制系统?复杂的动态系统怎么被控制的?

在汽车研发中或者购买新能源汽车中&#xff0c;通常能提到什么EPS控制、ABS控制、智能域控等等各种说法&#xff0c;听起来让人觉得非常不一般&#xff0c;但是&#xff0c;这控制究竟是什么&#xff1f;控制的又是什么&#xff1f;其实很好理解&#xff01; 关注我&#xff0c…

Unity Mirror 从入门到入神(一)

Mirror从入门到成神 文章目录 Mirror从入门到成神简介NetworkClientRegisterPrefabConnect (string address)Disconnect ()activeactiveHost NetworkServerSpawn 简介 Mirror是一个unity网络同步框架&#xff0c;基于MonoBehaviour生命周期的回调的基础上进行数值的同步&#…

HTML+CSS练习小项目——百叶窗

前言&#xff1a;在学习完HTML和CSS之后&#xff0c;我们就可以开始做一些小项目了&#xff0c;本篇文章所讲的是新手可以练习的小项目——百叶窗 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 先让我们看一下效果&#xff1a…

python怎么安装matplotlib

1、登陆官方网址“https://pypi.org/project/matplotlib/#description”&#xff0c;下载安装包。 2、选择合适的安装包&#xff0c;下载下来。 3、将安装包放置到python交互命令窗口的当前目录下。 4、打开windows的命令行窗口&#xff0c;通过"pip install"这个命令…

K8S认证 | CKA题库 + 答案 | 权限控制RBAC

1、权限控制RBAC 您必须在以下Cluster/Node上完成此考题&#xff1a; Cluster Master node Worker node k8s master …

如何加密电脑文件夹?重要文件夹怎么加密?

文件夹可以帮助我们管理电脑数据&#xff0c;而文件夹并不具有安全保护功能&#xff0c;很容易导致数据泄露。因此&#xff0c;我们需要加密保护电脑文件夹。那么&#xff0c;如何加密电脑文件夹呢&#xff1f;下面我们就来了解一下。 EFS加密 EFS加密是Windows提供的数据加密…