JavaEE >> Spring MVC(2)

embedded/2024/9/24 6:02:12/

接上文 本文介绍如何使用 Spring Boot/MVC 项目将程序执行业务逻辑之后的结果返回给用户,以及一些相关内容进行分析解释。

返回静态页面

要返回一个静态页面,首先需要在 resource 中的 static 目录下面创建一个静态页面,下面将创建一个静态页面:
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>test</title>
</head>
<body><h1>我是一个静态页面</h1>
</body>
</html>

然后在项目中实现对静态的返回,代码如下:

@Repository
@ResponseBody
@RequestMapping("/s")
public class StaticRepository {@RequestMapping("/static")public String t1(){return "/test.html";}
}

在浏览器中运行:

在这里插入图片描述
此时,会发现返回的不是一个 html 页面,而是一个 String 类型的数据。这显然不是我们想要的结果。
原因:@ResponseBody 注解的锅。在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过 response 对象输出指定格式的数据。

修改代码,将 @ResponseBody 注解注释掉,可得到一个 html 页面:
在这里插入图片描述
这也就验证了上述原因。

注意:
若使用的 @RestController 注解,可以将该注解注释掉,直接使用 @Controller 注解,因为观察 @RestController 注解的源码就会发现它里面就包含了 @ResponseBody 注解。
在这里插入图片描述

  • 补充:
  • 在Spring Boot/MVC 项目里面不管使用那几个五大类注解效果都是相同的,不必纠结使用 @Controller 还是 @Repository 等注解,它们只是为了区分业务逻辑而使用不同名字。就是为了让程序员看到注解之后,就能直接了解当前类的⽤途。
  • 在这里插入图片描述

返回数据(@ResponseBody)

前面也经常使用这个注解,@ResponseBody 注解就是为了让数据直接输出,而不会走视图处理。
该注解可以注解类,也可以注解方法。

  • 修饰类:表示该类的所有方法返回的都是数据
  • 修饰方法:表示该方法返回的都是数据

首先来看不使用该注解的效果:

@Repository
//@ResponseBody
@RequestMapping("/s")
public class StaticRepository {@RequestMapping("/rp")public String t2(){return "hello,zhangSan";}}

输出结果如下:

在这里插入图片描述
当没有使用 @ResponseBody 注解时,程序就会将 “hello,zhangsan” 认为是一个页面进行寻找,此时肯定是找不到的,要想让这句话直接输出,就需要加上 @ResponseBody 注解(此处在类或方法上加都是可以的,根据需求):
在这里插入图片描述
输出结果:

在这里插入图片描述

对于五大类注解来说,它们默认返回的都是一个页面,若想返回数据,就需要使用 @ResponseBody 注解

返回 HTML 片段

还是使用 @ResponseBody 注解,代码实现如下:

@Repository
//@ResponseBody
@RequestMapping("/s")
public class StaticRepository {@ResponseBody@RequestMapping("/t")public String h(){  // html 片段返回return "<h1>终是江边鸟不可望,心上人不可及</h1>";}}

在这里插入图片描述

返回对象、集合

创建对象和集合:

@Repository
//@ResponseBody
@RequestMapping("/s")
public class StaticRepository {@ResponseBody@RequestMapping("/t1")public Student getStudent(){  // 当为对象时,Spring MVC 项目的返回结果Student student = new Student();student.setName("花有重开日");student.setAge(999);return student;}@ResponseBody@RequestMapping("/t2")public Map<String,String> map(){ // 当为集合时,Spring MVC 项目的返回结果HashMap map = new HashMap<>();map.put("终是江边鸟不可望","心上人不可及");map.put("花有重开日","人无再少年");return map;}
}

在这里插入图片描述
在这里插入图片描述
当我们使用 Fiddler 进行抓包时,就会发现 @ResponseBody 注解会将它们转换成 application/json 格式(将 @ResponseBody 注解注释掉就会报错 ):

在这里插入图片描述

在这里插入图片描述

返回 JS、css

当要返回一个页面时,就不需要用 @ResponseBody 注解了。

@Repository
//@ResponseBody
@RequestMapping("/s")
public class StaticRepository {@RequestMapping("/t3")public String js(){   // 返回 jsreturn "/t1.js";}@RequestMapping("/t4")public String css(){  // 返回 cssreturn "/t2.css";}
}

在这里插入图片描述
在这里插入图片描述
Spring 会将它们自动转为相应的格式对用户显示出来。

小结:

  1. @ResponseBody 返回的值如果是字符会转换成 text/html,如果返回的是对象会转换成 application/json 返回给前端。
  2. @ResponseBody 可以⽤来修饰⽅法或者是修饰类,修饰类表示类中的所有⽅法都会返回 html 或者 json,⽽不是视图。

http://www.ppmy.cn/embedded/33418.html

相关文章

配电室智能巡检机器人

近年来&#xff0c;生产过程高度自动化&#xff0c;各工矿企业关键场所需定期巡检维护。但目前巡检主要靠人工&#xff0c;既耗时费力效率又低&#xff0c;且受环境等因素影响&#xff0c;巡检难以全面规范&#xff0c;隐患或问题易被忽视。在此情况下&#xff0c;如何利用现有…

大模型下的Agent、AIGC的商业案例集合

算是一份摘录 1 AIGC 对影楼的影响 https://mp.weixin.qq.com/s/3j-6FAxZEEvXUZ1q6by2uw 2 出海Talkie &#xff1a;情感智能体 https://mp.weixin.qq.com/s/KHPmfuVvywxxcI2rqoOghA Talkie 为每条消息提供 3 个免费灵感&#xff0c;如果用户需要更多 AI 生成的灵感选项&…

Stacking算法:集成学习的终极武器

Stacking算法&#xff1a;集成学习的终极武器 在机器学习的竞技场中&#xff0c;集成学习方法以其卓越的性能而闻名。其中&#xff0c;Stacking&#xff08;堆叠泛化&#xff09;作为一种高级集成技术&#xff0c;更是被誉为“集成学习的终极武器”。本文将带你深入了解Stacki…

Redisson 分布式锁和同步器

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 redisson 是基于redis的扩展库,使得redis除了应用于缓存以外,还能做队列…

SpringBoot+vue实现token认证登录

目录 后端(Spring Boot) 1. 创建用户实体和数据库表 2. 用户注册和登录接口 3. JWT Token生成 4. JWT Token验证 前端(Vue.js) 1. 用户界面 2. 发送登录请求 3. 接收并存储Token

Vagrant CentOS7 安装 Docker 及使用 Docker 安装 MySQL

1、安装 Docker 1.1、删除旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 1.2、安装必要的依赖包 sudo yum install -y yum-utils 1.3、配置源地址&#xf…

Qt扫盲-Qt D-Bus概述

Qt D-Bus概述 一、概述二、总线三、相关概念1. 消息2. 服务名称3. 对象的路径4. 接口5. 备忘单 四、调试五、使用Qt D-Bus 适配器1. 在 D-Bus 适配器中声明槽函数1. 异步槽2. 只输入槽3. 输入输出槽4. 自动回复5. 延迟回复 一、概述 D-Bus是一种进程间通信(IPC)和远程过程调用…

2024年3月 青少年软件编程等级考试Scratch四级真题

2024.03 青少年软件编程等级考试Scratch四级真题 一、判断题 第 1 题 圆点角色的程序如下图1所示&#xff08;角色默认方向90&#xff09;&#xff0c;运行程序&#xff0c;输入“HLHLHLHL”后得到的结果如下图2所示&#xff0c;如果想得到下图3中的结果&#xff0c;应该输入…