Spring MVC的常用注解(设置响应篇)

目录

1.返回静态页面

2.返回数据

3.返回HTML代码片段

4.返回json

5.设置状态码

6.设置Header

        (1).设置 Content-Type

        (2).设置其他Header


推荐先看前篇博客Spring MVC的常用注解(接收请求数据篇)

        接收到 HTTP 请求以后,返回的 HTTP 响应结果可以是数据,也可以是静态的页面,我们有时也要根据情况设置 HTTP 响应的状态码,Header 信息等

1.返回静态页面

        首先,我们先编写一个简单的前端代码,打印一个 Hello ,代码如下

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><h1>Hello</h1>
</body>
</html>

        注意前端代码文件所放的位置,应该放到 resources 资源文件夹下的 static 静态文件夹下

        接口代码如下:

@RestController
@RequestMapping("/ResponseController")
public class ResponseController {@RequestMapping("/showHello")public Object showHello(){return "/Hello.html";}
}

        运行并访问后得到的结果如下:

        此时我们发现,服务器返回的是普通的字符串,而不是我们编写好的静态页面,这就涉及到一个注解的细节

        看了前一篇博客后我们知道,类要加上注解 @RestController ,Spring 才会在收到 Http 请求以后去访问类中的方法,判断类中方法的路由映射是否符合 URL 的路径

        但 @RestController 这个注解其实是 @Controller 和 @ResponseBody 这两个注解合并而成的, @Controller 注解标注了该类是一个管理接口的类,Spring 会在收到 Http 请求以后去访问这个类中的接口, @ResponseBody 可以修饰类或者方法,修饰类表示类中的所有方法返回的响应都是数据,修饰方法表示该方法返回的响应是数据,要是没有加上该注解就说明方法返回的响应是静态页面

         所以我们可以修改一下上面的接口代码

把 @RestController 注解改为 @Controller 

@Controller
@RequestMapping("/ResponseController")
public class ResponseController {@RequestMapping("/showHello")public Object showHello(){return "/Hello.html";}
}

        修改以后我们重新启动 idea 进行访问可以看到,此时服务器成功返回了静态页面


2.返回数据

        上面我们提到 @ResponseBody 可以修饰类或者方法,修饰类表示类中的所有方法返回的响应都是数据,修饰方法表示该方法返回的响应是数据

        所以我们修改一下上面的接口代码,为方法 showHello()添加上注解 @ResponseBody

@Controller
@RequestMapping("/ResponseController")
public class ResponseController {@RequestMapping("/showHello")@ResponseBodypublic Object showHello(){return "/Hello.html";}
}

        修改以后我们重新启动 idea 进行访问可以看到,服务器返回的响应又变回了数据


3.返回HTML代码片段

        当后端返回数据时,如果数据中包含有 HTML 代码片段,也会被浏览器解析

        接口代码如下:

@RequestMapping("/htmlHello")@ResponseBodypublic String htmlHello(){return "<h1>Hello</h1>";}

        重新启动 idea 进行访问可以看到浏览器将服务器返回的 HTML 代码片段数据进行了解析


4.返回json

        当接口返回的数据是对象时,Spring 会自动将对象解析成 json 格式的字符串放到 Http 响应中,发送给浏览器

        接口代码如下,该方法将返回一个 HashMap<String,String> 类型的对象

    @RequestMapping("/hashmapJson")@ResponseBodypublic HashMap<String,String> hashmapJson(){HashMap<String,String> hashMap=new HashMap<>();hashMap.put("name1","zhangsan");hashMap.put("name2","lisi");hashMap.put("name3","wangwu");return hashMap;}

        我们重新启动 idea 进行访问可以看到如下 json 格式的字符串

        通过 fiddle Classic 抓包我们可以看到,服务器返回的 HTTP 响应的 Content-Type 的确是application/json 类型


5.设置状态码

        Spring MVC 会根据我们方法的返回结果自动设置状态码,程序猿也可以手动设置状态码,Spring MVC 设置状态码并没有提供方便的注解,所以需要采用 Servlet 的方式进行设置

        接口代码如下,由于 Spring MVC 的底层就是 servlet 所以 servlet 的机制,Spring MVC 都有,而 HttpServletResponse 和  HttpServletRequest 都是 Spring MVC 的内置对象,需要的时候直接定义使用即可

@RequestMapping("/setStatus")@ResponseBodypublic String setStatus(HttpServletResponse reponse){reponse.setStatus(401);return "设置状态码成功";}

        我们重新启动 idea 进行访问可以看到方法执行成功

        通过 fiddle Classic 抓包我们可以看到 Http 响应的状态码为 401 成功被修改


6.设置Header

        (1).设置 Content-Type

        我们可以通过 @RequestMapping 注解的属性 produces 来设置 Http 响应 Header 中的Content-Type 属性

接口代码如下:

@RequestMapping(value = "/setHeader",produces = "application/json")@ResponseBodypublic String setHeader(){return "{\"success\":true}";}

我们重新启动 idea 进行访问可以看到方法执行成功

通过 fiddle Classic 抓包我们可以看到 Http 响应的 Content-Type 被设置为 application/json 

        (2).设置其他Header

        要设置其他 Header ,我们需要 Spring MVC 的内置对象 HttpServletResponse 来进行设置

接口代码如下:

 @RequestMapping("/setHeader2")@ResponseBodypublic String setHeader2(HttpServletResponse response){response.setHeader("name","zhangsan");return "设置Header成功";}

我们重新启动 idea 进行访问可以看到方法执行成功

通过 fiddle Classic 抓包我们可以看到 Http 响应的 Header 中已经添加上了键值对

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序怎么制作?【小程序开发平台教学】

随着移动互联网的快速发展&#xff0c;微信小程序已经成为了人们日常生活中不可或缺的一部分。从购物、支付、出行到社交、娱乐、教育&#xff0c;小程序几乎涵盖了我们生活的方方面面。那么&#xff0c;对于有营销需求的企业商家来说&#xff0c;如何制作一个自己的微信小程序…

微服务初始和Nacos安装

一)初始微服务: 微服务是将一个大型的&#xff0c;单一的应用程序拆分成多个小型服务&#xff0c;每一个服务负责于特定的业务功能&#xff0c;并且可以通过网络来和其他服务进行通讯&#xff0c;是一个思想&#xff0c;将一个大的项目拆分成多个小的项目&#xff0c;多个小的项…

DDACO

算法 alternative set包括备用路径和禁忌表&#xff0c;roulette体现所占比例越大被选中概率越高的思想。在图2中&#xff0c;节点表示与图1中的边相同的路径&#xff0c;边表示邻接关系&#xff08;AND关系&#xff09; 所有的帕累托最优解构成帕累托最优解集 作者未提供代码…

2023年11月1日蜻蜓C影视追剧系统v1.2.2更新-与时俱进调整微信登录授权获取方式-修复无法登陆授权

2023年11月1日蜻蜓C影视追剧系统v1.2.2更新-与时俱进调整微信登录授权获取方式-修复无法登陆授权 问题背景&#xff1a; 小程序用户头像昵称获取规则调整公告官方 微信团队2022-05-09 更新时间&#xff1a;2022年11月9日 由于 PC/macOS 平台「头像昵称填写能力」存在兼容性问…

【移远QuecPython】EC800M物联网开发板的UART串口配置

【移远QuecPython】EC800M物联网开发板的UART串口配置 文章目录 UART初始化UART读写写数据轮询读取中断读取 串口测试附录&#xff1a;列表的赋值类型和py打包列表赋值BUG复现代码改进优化总结 py打包 UART初始化 UART库&#xff1a; from machine import UART引脚和UART对应…

请问嵌入式行业会变得和java一样卷死吗?

今日话题&#xff0c;嵌入式行业会变得和java一样卷死吗&#xff1f;嵌入式行业未来不太可能出现像互联网行业那样的内卷化情况。嵌入式开发在制造业等重要第二产业中扮演关键角色&#xff0c;这些行业的稳定性较高&#xff0c;波动较小&#xff0c;因此嵌入式岗位的稳定性相对…

讲述为什么要学习Adobe XD以及 Adobe XD下载安装

首先 我们要了解 Adobe XD 是个什么东西 XD是Adobe公司专门开发出来面向交互、界面设计的矢量绘图工具。 然后是 他可以做什么&#xff1f; 最基本的 可以做UI界面设置 所有 手机 平板 电脑等设备的UI界面 我们都可以通过XD完成 还有就是原型设置 我们可以做各种界面图 还有…

智能视频监控平台EasyCVR出现偶发通道在线,但是无法播放的情况要怎么解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储…

HNU-编译原理-讨论课1

讨论课安排&#xff1a;2次4学时&#xff0c;分别完成四大主题讨论 分组&#xff1a;每个班分为8组&#xff0c;每组4~5人&#xff0c;自选组长1人 要求和说明&#xff1a; 以小组为单位上台报告&#xff1b;每次每组汇报2个小主题&#xff0c;每组按要求在2个小主题中各选1…

JS逆向爬虫---请求参数加密① 【某度翻译】

接口定位 抓包输入翻译关键词 全局搜索关键词,定位到接口https://fanyi.baidu.com/v2transapi 全局搜索sign 多次尝试定位变化参数sign 断点调试b函数 复制整个function&#xff0c;并测试函数运行结果。 需要把function改写成如下的数据&#xff1a; function(t) {var o…

泛微e-office download.php任意文件

0x01 应用介绍 泛微e-office系统是标准、易用、快速部署上线的专业协同OA软件,国内协同OA办公领域领导品牌,致力于为企业用户提供专业OA办公系统、移动OA应用等协同OA整体解决方案 0x02 影响版本及语法特征 泛微e-offcie9 fofa&#xff1a;app”泛微-EOffice” && b…

九、W5100S/W5500+RP2040树莓派Pico<SNTP 获取网络时间>

文章目录 1 前言2 协议简介2.1 什么是SNTP2.2 SNTP的优点2.3 SNTP原理2.4 应用场景 3 WIZnet以太网芯片4 SNTP网络设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 随着科技的不断进步和应用需求的不断变…

【音视频 | wav】wav音频文件格式详解——包含RIFF规范、完整的各个块解析、PCM转wav代码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

【数据结构】堆的实现

大小堆的概念 将根节点最大的堆叫做最大堆或大根堆&#xff0c;根节点最小的堆叫做最小堆或小根堆。 堆的接口函数 void HeapInit(Heap*st);//堆的初始化 void swap(int* str1, int* str2);//交换两个数据 void Adjustup(int* a, int child);//向上调整 void HeapPush(Heap* …

写在2023末,很庆幸自己入了软件测试这行...

为什么会学习软件测试&#xff1f; 已经28岁了&#xff0c;算一下快过去3年了&#xff0c;刚毕业那会工作了一年&#xff0c;因为自己当时很迷茫&#xff08;觉得自己挺废的&#xff09;&#xff0c;所以就没去工作就一直在家&#xff0c;家里固定每个月给点生活费&#xff0c…

微信小程序:两层循环的练习,两层循环显示循环图片大图(大图显示、多层循环)

效果 代码分析 外层循环 外层循环的框架 <view wx:for"{{info}}" wx:key"index"></view> wx:for"{{info}}"&#xff1a;这里wx:for指令用于指定要遍历的数据源&#xff0c;即info数组。当遍历开始时&#xff0c;会依次将数组中的每…

Mac 上安装 Emscripten

背景&#xff1a;Web 端需要使用已有的 C 库&#xff0c;需要将 C 项目编译成 WebAssembly(.wasm) 供 js 调用。 Emscripten 可以将 C 编译成 .wasm 一、下载源码 # 下载 emsdk 源码 git clone https://github.com/emscripten-core/emsdk.git# 下载完成后进入到 emsdk 项目根…

GZ035 5G组网与运维赛题第9套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第9套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; 子…

汽车EDI:福特Ford EDI项目案例

项目背景 福特&#xff08;Ford&#xff09;是世界著名的汽车品牌&#xff0c;为美国福特汽车公司&#xff08;Ford Motor Company&#xff09;旗下的众多品牌之一。此前的文章福特FORD EDI需求分析中&#xff0c;我们已经了解了福特Ford EDI 的大致需求&#xff0c;本文将会介…

C++核心编程---友元

目录 友元 友元的关键字 friend 友元的三种实现方式 1. 全局函数做友元 2. 类做友元 3. 成员函数做友元 友元 生活中你的家有客厅(Public)&#xff0c;有你的卧室(Private) 客厅所有来的客人都可以进去&#xff0c;但是你的卧室是私有的&#xff0c;也就是说只有你能进…