【SpringBoot 2】(八)数据响应 页面响应(一)

简介: 【SpringBoot 2】(八)数据响应 页面响应(一)
+关注继续查看

1 数据响应

image.png

 数据响应一般分为两种:页面响应和数据响应,一般来说页面响应是用来开发一些单体项目(也就是前后端都在一个开发工具中),而数据响应则是用来进行前后端分离开发的项目,前端发送过来请求后端响应相应的数据。


1.1 数据响应(JSON为例)

 如果想让SpringMVC响应返回一个JSON类型的数据,首先需要在项目的pom.xml文件中导入web场景的启动器


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--web场景的启动器的底层导入了JSON的开发场景-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-json</artifactId>
    <version>2.6.4</version>
    <scope>compile</scope>
</dependency>


 其次就是在controller中加入@ResponseBody注解,这样的话就是响应数据而不是页面跳转,或者将controller上的@Controller注解换成@RestController,相当于这个controller下的所有方法都自动加上了@ResponseBody注解。image.png


1.2 数据响应之内容协商

 内容协商: 服务器会根据客户端接收能力的不同,返回不同媒体类型的数据。

 原理: 前端发送请求的时候请求头携带Accept字段,用于服务器声明自己(客户端)能够接收的数据类型。

 处理流程: 首先判断当前响应头中是否已经有之前处理时缓存的媒体类型,如果没有的话就是第一次处理需要确定处理的媒体类型,通过Accept字段获取客户(PostMan、浏览器)支持接收的内容类型。经过遍历循环所有当前系统的MessageConverter看谁支持操作这个对象(Person),找到支持操作Person的converter之后把它支持的媒体类型统计出来。如此操作我们就得到了客户端支持接受的类型和服务端能够返回的类型,再通过内容协商的最佳匹配媒体类型,用支持将对象转为最佳匹配媒体类型converter。


2 页面响应

 SpringBoot默认的打包方式是jar包方式,但是JSP不支持在jar包(一种压缩包)中编译,所以SpringBoot默认不支持JSP,于是我们需要引入第三方的模板引擎技术——Thymeleaf实现页面的渲染。


2.1 模板引擎之Thymeleaf

 要想使用Thymeleaf实现页面的渲染的话,首先需要在pom.xml文件里引入它的场景启动器依赖


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>


 在导入场景启动器之后,SpringBoot就会给我们在ThymeleafAutoConfiguration自动配置类中配置好所有的相关组件,并将相关配置项与ThymeleafProperties.class(代码如下)通过注解@EnableConfigurationProperties相关联,配置类中设置了默认页面跳转的前缀和后缀,也就是规范了页面存放的位置必须是templates文件夹和页面的文件后缀必须是.html,我们只需要直接开发页面即可。


private String prefix = "classpath:/templates/";
private String suffix = ".html";


入门案例


第一步: templates文件夹下建个html文件

第二步: <html>标签引入templates命名空间,这样的优点就是在进行页码编写的时候会有相关的提示信息


xmlns:th="http://www.thymeleaf.org"


第三步: 创建一个controller用于进页面跳转


@Controller
public class ViewTestController {
   @GetMapping("/jump")
   public String jumpTo(Model model) {
       // 之前讲过model的所有属性值都会存储在request域中,需要使用的时候直接使用
       model.addAttribute("msg", "你好,张三");
       model.addAttribute("link", "http://www.baidu.com");
       return "seccess";
   }
}


第四步: 编写页面代码获取域中的值


<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
   <meta charset="UTF-8">
   <title>Title</title>
</head>
<body>
   <h1 th:text="${msg}">哈哈</h1>
   <h2>
       <a th:href="${link}">点击进入百度</a>
       <a th:href="@{link}">点击进入百度</a>
   </h2>
</body>
</html>


⚠  页面中两种符号区别:${}是直接获取到link属性的值作为链接地址,而@{}是拼装项目的访问路径+符号里的值,对本案例而言:第一个链接是打开百度,第二个是发送http://localhost:8080/link的请求


相关文章
|
2月前
|
存储 JSON 关系型数据库
深入探索MySQL中JSON数据的查询、转换及springboot中的应用
MySQL版本引入了对JSON数据类型的支持,这为我们处理和存储非结构化数据提供了新的可能性。通过灵活利用MySQL的JSON函数,我们可以实现高效的查询和转换操作,提取有用的数据,并将其转换为有意义的格式。本文将深入探索MySQL中JSON数据的查询与转换技巧,帮助您更好地利用这一功能。
231 0
深入探索MySQL中JSON数据的查询、转换及springboot中的应用
|
4月前
|
SQL 数据库
springboot+mybatis,mapper调用查询的数据为空,报空指针异常
springboot+mybatis,mapper调用查询的数据为空,报空指针异常
292 0
|
4月前
|
XML JSON 人工智能
springboot工程中调用第三方接口json数据定时存入数据库
springboot工程中调用第三方接口json数据定时存入数据库
|
4月前
|
JSON 前端开发 数据格式
【springboot+vue前后端分离】之后台接收不到前台的数据
【springboot+vue前后端分离】之后台接收不到前台的数据
|
4月前
|
前端开发 Java 应用服务中间件
IDEA+springboot部署前端项目无法访问数据404问题
IDEA+springboot部署前端项目无法访问数据404问题
95 0
|
5月前
|
canal 消息中间件 网络协议
Java:SpringBoot整合Canal+RabbitMQ组合实现MySQL数据监听
Java:SpringBoot整合Canal+RabbitMQ组合实现MySQL数据监听
310 0
|
5月前
|
Java 关系型数据库 MySQL
java入门019~springboot批量导入excel数据到mysql
java入门019~springboot批量导入excel数据到mysql
108 0
|
5月前
|
缓存 Java
SpringBoot程序数据预装载
在项目实际的开发过程中,有时候会遇到需要在应用程序启动完毕对外提供服务之前预先将部分数据装载到缓存的需求。本文就总结了常见的数据预装载方式及其实践。
49 0
|
5月前
|
JSON 前端开发 Java
基于Springboot外卖系统16:菜品修改模块+菜品信息回显+ID查询口味列表+组装数据并返回
在菜品管理列表页面点击修改按钮,跳转到修改菜品页面,在修改页面回显菜品相关信息并进行修改,最后点击确定按钮完成修改操作。
57 0
|
5月前
|
Java
SpringBoot 采用JsonSerializer和Aop 实现可控制的数据脱敏
最近在写一个功能,对用户敏感的数据进行脱敏,在网上看一圈基本上都是全局范围的,我觉得应该更加灵活,在不同场景,不同业务下进行脱敏更加合适。
282 0
相关产品
云迁移中心
推荐文章
更多