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

news2025/1/13 6:22:21

目录

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")
    @ResponseBody
    public Object showHello(){
        return "/Hello.html";
    }
}

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


3.返回HTML代码片段

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

        接口代码如下:

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

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


4.返回json

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

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

    @RequestMapping("/hashmapJson")
    @ResponseBody
    public 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")
    @ResponseBody
    public 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")
    @ResponseBody
    public String setHeader(){
        return "{\"success\":true}";
    }

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

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

        (2).设置其他Header

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

接口代码如下:

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

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

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

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

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

相关文章

火山引擎 ByteHouse:只需 2 个方法,增强 ClickHouse 数据导入能力

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 作为企业数字化建设的必备要素&#xff0c;易用的数据引擎能帮助企业提升数据使用效率&#xff0c;更好提升数据应用价值&#xff0c;夯实数字化建设基础。 数据导…

基于SpringBoot+Vue实现前后端分离的旅游网站系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

【网络安全 --- 任意文件上传漏洞靶场闯关 6-15关】任意文件上传漏洞靶场闯关,让你更深入了解文件上传漏洞以及绕过方式方法,思路技巧

一&#xff0c;工具资源下载 百度网盘资源下载链接地址&#xff1a; 百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固&#xff0c;支持教育网加速&#xff0c;支持手机端。注册使用百度网盘即可享受免费存储空间https://pan…

【LeetCode刷题日志】88.合并两个有序数组

&#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;C/C领域新星创作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;LeetCode 刷题日志&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;…

markMan(马克鳗)前端标注工具

马克鳗一款很好用的标注、测量工具&#xff0c;前端必备神器。当需求给我们的原型没有标注颜色&#xff0c;尺寸数据&#xff0c;我们就可以用马克鳗自己标出来。 1.进入官网进行下载 官网网址&#xff1a;http://www.getmarkman.com/ 功能演示&#xff1a; 打开markMan需要拖…

企业金蝶KIS软件服务器中了locked勒索病毒怎么办,勒索病毒解密

最近一段时间&#xff0c;网络上的locked勒索病毒又开始了新一波的攻击&#xff0c;给企业的正常生产生活带来了严重影响。经过最近一段时间云天数据恢复中心对locked勒索病毒的解密&#xff0c;为大家整理了以下有关locked勒索病毒的相关信息。近期locked勒索病毒主要攻击金蝶…

Xamarin.Forms更改AndroidManifest.xml导致错误:没有兼容的代码在线程上运行

想在APP中加一个打开摄像头的功能&#xff0c;按照该博主的方法&#xff1a;https://blog.csdn.net/zhenweied09/article/details/82287761 设置好后&#xff0c;再运行就出现上图的错误&#xff0c;于是查找原因&#xff0c;定位到是更改AndroidManifest.xml文件导致的&#…

用软件模拟IPC的RTSP流,对接烟火识别算法服务,做实时的烟火检测、人员入侵检测、抽烟检测等算法

最近在研发烟火识别的算法&#xff0c;想要检验算法集成到视频分析服务之后的效果&#xff0c;发现线上的摄像机很难发现火情&#xff0c;有的很长时间都不会有检测的结果&#xff0c;于是我就需要用已经被检验过的视频文件&#xff0c;模拟一路IPC的RTSP流&#xff0c;来测试烟…

Spring@Lazy是如何解决构造函数循环依赖问题

Spring实例化源码解析之循环依赖CircularReference这章的最后我们提了一个构造函数形成的循环依赖问题&#xff0c;本章就是讲解利用Lazy注解如何解决构造函数循环依赖和其原理。 准备工作 首先创建两个构造函数循环依赖的类&#xff0c;TestA和TestB&#xff0c;代码如下&am…

MFC 重绘Button按钮,使用png、jpg图片贴图

使用MFC实现Button按钮实现png和jpg贴图功能&#xff0c;底部有实现代码的工程链接&#xff0c;免费下载 此工程使用了第三方库GDI 实现文件如下&#xff1a; CGdiPlusBitmap.h GdipButton.cpp GdipButton.h MemDC.h 一、在启动cpp里面增加GDI初始化与释放 Gdiplus::Gdiplus…

“2024中国信息通信展览会”促进全球通信领域交流合作的重要桥梁

2024中国国际信息通信展览会&#xff08;PT展&#xff09; China International PT Expo 时间:2024年9月25-27日 地点:北京.国家会议中心 主办单位&#xff1a; 工业和信息化部 协办单位&#xff1a; 中国通信标准化协会 中国通信企业协会 中国电信 中国移动 中国联通…

【Java每日一题】——第四十三题:编程用多态实现打印机.。分为黑白打印机和彩色打印机,不同类型的打印机打印效果不同。(2023.10.30)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

[Unity][VR]透视开发系列4-解决只看得到Passthrough但看不到Unity对象的问题

【视频资源】 视频讲解地址请关注我的B站。 专栏后期会有一些不公开的高阶实战内容或是更细节的指导内容。 B站地址: https://www.bilibili.com/video/BV1Zg4y1w7fZ/ 我还有一些免费和收费课程在网易云课堂(大徐VR课堂): https://study.163.com/provider/480000002282025/…

你还在找什么赚钱的项目吗?真心话坦白局系统源码

它具有匿名信息的神秘感 但又会给你一点小提示 能让你有无限挖掘下去的好奇感 也能让你说出那些不敢说出口的话 敢来一场坦白局吗&#xff01; 坦白局这个功能类似于悄悄话&#xff0c;只不过是匿名的悄悄话。 有时候我们有些话是开不了口的&#xff0c;坦白局给了我们一个…

颠覆传统:跨境电商借助DTC模式掀起新浪潮

跨境电商领域正经历着一场前所未有的革命&#xff0c;直接到消费者&#xff08;Direct-to-Consumer&#xff0c;DTC&#xff09;模式崭露头角&#xff0c;成为这一领域的一股强大力量。 传统的跨境电商模式受到了挑战&#xff0c;DTC模式正重新定义着全球电商的规则和格局。本…

STM32单片机智能小车一PWM方式实现小车调速和转向

目录 1. 电机模块开发 2. 让小车动起来 3. 串口控制小车方向 4. 如何进行小车PWM调速 5. PWM方式实现小车转向 1. 电机模块开发 L9110s概述 接通VCC&#xff0c;GND 模块电源指示灯亮&#xff0c; 以下资料来源官方&#xff0c;具体根据实际调试 IA1输入高电平&#xff…

销售流程管理实践及工具-Leangoo免费看板工具

销售管理既可以提高企业的销售业绩&#xff0c;又可以跟客户建立良好的关系。所以企业实施销售管理是非常有必要的。Leangoo免费看板不仅可以管理任务&#xff0c;它也可以成为一个绝佳的销售管理工具&#xff0c;帮助销售理清思路&#xff0c;达成目标。 首先在Leangoo中创建…

如何用加密狗保护工业软件核心技术?

工业软件的抄袭风险 1.1 反编译直窥软件的核心 工业软件代表着技术进步和创新&#xff0c;其中蕴含的算法、数据处理流程和功能模块往往是企业的核心竞争力。但随着技术的发展&#xff0c;反编译工具变得越来越先进&#xff0c;让不法分子可以“解剖”软件&#xff0c;看到它的…

Fegin ----微服务 SpringCloud

@FeignClient 是一个注解,用于创建一个声明式的 REST 客户端,用于访问其他服务的 REST API。通过 Feign Client,可以将远程服务的 API 当做本地服务进行调用,Feign Client 能够自动生成 API 客户端的实现类,在使用 API 时,只需要像调用本地方法一样调用即可。 @FeignClie…

Linux(Centos7)防火墙端口操作记录

1、nginx -t #Nginx配置文件检查 上述截图代表检查没问题 上述截图检查配置文件配置错误&#xff0c;并提示错误文件位置 2、systemctl restart nginx #重启Nginx 重启Nginx失败 3、systemctl status nginx.service #查看Nginx服务状态 80端口被占导致服务启动失败 4、n…