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")
    @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 中已经添加上了键值对

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UE4/UE5 设置widget中text的字体Outline

想要在蓝图中控制Widget 中的 text字体&#xff0c;对字体outline参数进行设置。 但是蓝图中无法直接获取设置outline参数的方法&#xff1a; 没有outline相关的蓝图函数 该参数本身是在Font类别下的扩展&#xff0c;所以只要获取设置Font参数即可进行outline的设置 text连出…

11、插件注入到vue实例中

新建插件 nuxt-demo2\plugins\vue-inject.js import Vue from "vue"Vue.prototype.$test function (str) {console.log(str) }配置插件 nuxt-demo2\nuxt.config.js export default {...// Plugins to run before rendering page: https://go.nuxtjs.dev/config-…

python基于VGG19实现图像风格迁移

目录 1、原理 2、代码实现 1、原理 图像风格迁移是一种将一张图片的内容与另一张图片的风格进行合成的技术。 风格&#xff08;style&#xff09;是指图像中不同空间尺度的纹理、颜色和视觉图案&#xff0c;内容&#xff08;content&#xff09;是指图像的高级宏观结构。 实…

计算机网络重点概念整理-第四章 网络层【期末复习|考研复习】

计算机网络复习系列文章传送门&#xff1a; 第一章 计算机网络概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第七章 网络安全 计算机网络整理-简称&缩写 文章目录 前言四、网络层4.1 网络层功能4.1.1 电路交换、报文交换与分组交换4.1…

电商数据采集抓取封装数据、淘宝、天猫、京东等平台商品详情API接口参数详解

电商数据采集抓取数据、淘宝、天猫、京东等平台的电商数据抓取&#xff0c;网页爬虫、采集网站数据、网页数据采集软件、python爬虫、HTM网页提取、APP数据抓包、APP数据采集、一站式网站采集技术、BI数据的数据分析、数据标注等成为大数据发展中的热门技术关键词。那么电商数据…

【git】git拉取代码报错,fatal: refusing to merge unrelated histories问题解决

大家好&#xff0c;我是好学的小师弟。今天准备将之前写的代码&#xff0c;拉到新的工程文件夹(仓库)下面&#xff0c;用了pull命令&#xff0c;结果报错了&#xff0c;报错截图如下 $ git pull https://gitee.com/* #仓库地址 fatal: refusing to merge unrelated histor…

12、SpringCloud -- redis库存和redis预库存保持一致、优化后的压测效果

目录 redis库存和redis预库存保持一致问题的产生需求:代码:测试:优化后的压测效果之前的测试数据优化后的测试数据redis库存和redis预库存保持一致 redis库存是指初始化是从数据库中获取最新的秒杀商品列表数据存到redis中 redis的预库存是指每个秒杀商品每次成功秒杀之后…

Spring循环依赖处理

循环依赖是指两个或多个组件之间相互依赖&#xff0c;形成一个闭环&#xff0c;从而导致这些组件无法正确地被初始化或加载。这种情况可能会在软件开发中引起问题&#xff0c;因为循环依赖会导致初始化顺序混乱&#xff0c;组件之间的关系变得复杂&#xff0c;甚至可能引发死锁…

汉诺塔问题

作者本文的目标是利用递归求解汉诺塔的具体步骤 目录 汉诺塔是什么游戏思路1.最简单的情况——一个圆盘依次类推&#xff0c;增加盘子个数2.两个圆盘3.三个圆盘解释递归过程 完整代码 汉诺塔是什么 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#x…

Kubernetes - Ingress HTTP 升级 HTTPS 配置解决方案(新版本v1.21+)

之前我们讲解过 Kubernetes - Ingress HTTP 搭建解决方案&#xff0c;并分别提供了旧版本和新版本。如果连 HTTP 都没搞明白的可以先去过一下这两篇 Kubernetes - Ingress HTTP 负载搭建部署解决方案_放羊的牧码的博客-CSDN博客Kubernetes - Ingress HTTP 负载搭建部署解决方案…

学习笔记---更进一步的双向链表专题~~

目录 1. 双向链表的结构&#x1f98a; 2. 实现双向链表&#x1f41d; 2.1 要实现的目标&#x1f3af; 2.2 创建初始化&#x1f98b; 2.2.1 List.h 2.2.2 List.c 2.2.3 test.c 2.2.4 代码测试运行 2.3 尾插打印头插&#x1fabc; 思路分析 2.3.1 List.h 2.3.2 List.…

企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及审…

Ceph入门到精通-bluestore IO流程及导入导出

bluestore 直接管理裸设备&#xff0c;实现在用户态下使用linux aio直接对裸设备进行I/O操作 写IO流程&#xff1a; 一个I/O在bluestore里经历了多个线程和队列才最终完成&#xff0c;对于非WAL的写&#xff0c;比如对齐写、写到新的blob里等&#xff0c;I/O先写到块设备上&am…

0003net程序设计-net旅游景点推荐系统

文章目录 摘 要目录系统设计开发环境 摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#…

多模态 多引擎 超融合 新生态!2023亚信科技AntDB数据库8.0产品发布

9月20日&#xff0c;以“多模态 多引擎 超融合 新生态”为主题的亚信科技AntDB数据库8.0产品发布会成功举办&#xff0c;从技术和生态两个角度全方位展示了AntDB数据库第8次大型能力升级和生态建设成果。浙江移动、用友、麒麟软件、华录高诚、金云智联等行业伙伴及业界专家共同…

Goland连接服务器/虚拟机远程编译开发

创建SSH连接 SSH用于与远程服务器建立连接 Settings -> Tools -> SSH Configurations 添加新的ssh连接&#xff0c;Host为ip地址&#xff0c;Username为用户名&#xff0c;认证方式这里选择密码验证 全部填完后可以点击Test Connection测试连接是否成功 创建Deployment…

nginx 转发数据流文件

1.问题描述 后端服务&#xff0c;从数据库中查询日志&#xff0c;并生成表格文件返回静态文件。当数据量几兆时&#xff0c;返回正常&#xff0c;但是超过几十兆&#xff0c;几百兆&#xff0c;就会超过网关的连接超时时间30秒。 时序图 这里面主要花费时间的地方在&#xff…

SPSS单样本t检验

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

在excel中如何打出上标、下标

例如&#xff0c;想把A2的2变为下标。 在单元中输入内容&#xff1a; 选中2&#xff1a; 右键单击&#xff0c;然后点击“设置单元格格式”&#xff1a; 在特殊效果的下面勾选“下标”&#xff0c;然后点击下面的“确定”按钮&#xff1a; 就将2变为下标了&#xff1a;…

线扫相机DALSA--采集卡Base模式设置

采集卡默认加载“1 X Full Camera Link”固件&#xff0c;Base模式首先要将固件更新为“2 X Base Camera Link”。 右键SCI图标&#xff0c;选择“打开文件所在的位置”&#xff0c;找到并打开SciDalsaConfig的Demo&#xff0c;如上图所示&#xff1a; 左键单击“获取相机”&a…