JavaEE >> Spring MVC(2)

devtools/2024/10/18 21:21:41/

接上文 本文介绍如何使用 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/devtools/33409.html

相关文章

银行ETL-监管报送

1104报表 1104报表主要包括&#xff1a;资产负债&#xff0c;表外业务、流动性风险、贷款质量、投向行业和地区、重点客户等。 1104报表分类 普通报表、机构特色类报表。 反洗钱 大额交易、可疑交易。标签分类&#xff1a;疑似犯罪、疑似毒品、疑似传销。 反洗钱—接口报…

2024年第七届大数据技术国际会议(ICBDT 2024)即将召开!

2024年第七届大数据技术国际会议&#xff08;ICBDT 2024&#xff09;将于2024年9月20-22日在中国杭州的浙江工商大学举行。数据驱动未来&#xff0c;技术引领潮流。从数据挖掘算法的优化&#xff0c;到数据处理速度的提升&#xff0c;再到数据安全与隐私保护的进步&#xff0c;…

AI终端设备的自动化分级

摘要&#xff1a; AI智体被定义为感知环境、做出决策和采取行动的人工实体。 受SAE&#xff08;汽车工程师学会&#xff09;自动驾驶6个级别的启发&#xff0c;AI智体也根据效用和强度进行分类&#xff0c;分为以下几个级别&#xff1a; L0——无AI&#xff0c;有工具&#xf…

【数据结构】链表专题2

前言 本篇博客继续探讨有关链表的专题&#xff0c;这片博客的题&#xff0c;提前打个预防针&#xff0c;有点意思哦&#xff0c;哈哈哈&#xff0c;话不多说&#xff0c;进入正文 &#x1f493; 个人主页&#xff1a;小张同学zkf ⏩ 文章专栏&#xff1a;数据结构 若有问题 评论…

BL124网关支持Modbus转Ethernet/IP

Modbus网关BL120是一款专注于Modbus协议之间相互转换的通信设备。Modbus网关BL120支持多种下行采集协议&#xff0c;包括Modbus RTU和Modbus TCP&#xff0c;同时在上行转发协议方面同样支持Modbus RTU和Modbus TCP。Modbus网关为Modbus RTU和Modbus TCP协议的相互转换提供了稳…

element-ui的bug记录

1.先隐藏元素再显示元素时&#xff0c;导致校验不生效的做法 <el-form-itemlabel"时间长度"prop"timeLength"v-show"form.majorFlag":rules"[{ required: form.majorFlag ? true : false, message: 时间长度不能为空, trigger: blur }…

Unity之ShaderGraph入门简介与配置

前言 ShaderGraph是Unity的一个可视化着色器编辑工具,它允许开发者在不编写代码的情况下创建复杂的着色器效果。ShaderGraph提供了一个直观的图形界面,用户可以通过拖拽节点并连接它们来构建自定义的着色器。用户可以在ShaderGraph中使用各种节点,如数学运算、纹理采样、颜…

Golang | Leetcode Golang题解之第70题爬楼梯

题目&#xff1a; 题解&#xff1a; func climbStairs(n int) int {sqrt5 : math.Sqrt(5)pow1 : math.Pow((1sqrt5)/2, float64(n1))pow2 : math.Pow((1-sqrt5)/2, float64(n1))return int(math.Round((pow1 - pow2) / sqrt5)) }