SpringBoot3_Web开发

4. 内容协商

一套系统适配多端数据返回

  • 移动端:返回JSON数据
  • 第三方:返回XML
  • IoT:返回自定义协议数据

1. 默认规则

1. SpringBoot 多端内容适配
  • 基于请求头内容协商 【默认】
    • 客户端向服务端发送请求,携带HTTP标准的 Accept 请求头
      • Accept:application/json、text/xml、text/yaml
      • 服务端根据客户端请求头期望的数据类型进行动态返回
  • 基于请求参数内容协商
    • 发送请求 GET /projects/spring-boot?format=json
      • 匹配到 @GetMapping("/projects/spring-boot")
      • 根据参数协商,优先返回 json 类型数据【需要开启参数匹配设置】
    • 发送请求 GET /projects/spring-boot?format=xml,优先返回 xml 类型数据
2. 内容协商原理 - HttpMessageConverter

HttpMessageConverter 怎么工作?何时工作?
定制 HttpMessageConverter 来实现多端内容协商
编写 WebMvcConfigurer 提供的 configureMessageConverters 底层,修改底层的 MessageConverter

1. @ResponseBody 由 HttpMessageConverter 处理

标注了 @ResponseBody 的返回值 将会由支持它的 HttpMessageConverter 写给浏览器

  1. 如果 controller 方法的返回值 标注了 @ResponseBody 注解
    • 请求进来会先来到 DispatchServletdoDispatch() 进行处理
    • 找到一个 HandlerAdapter 适配器。利用适配器执行目标方法
    • RequestMappingHandlerAdapter 来执行,调用 invokeHandlerMethod() 来执行目标方法
    • 目标方法执行之前,会准备好两个东西
      • HandlerMethodArgumentResolver:参数解析器,确定目标方法每个参数值
      • HandlerMethodReturnValueHandler:返回值处理器,确定目标方法的返回值该怎么处理
    • RequestMappingHandlerAdapter 里的 invokeAndHandle() 真正执行目标方法
    • 目标方法执行完成,会返回 返回值对象
    • 找到一个合适的返回值处理器 HandlerMethodReturnValueHandler
    • 最终找到 RequestResponseBodyMethodProcessor 能处理 标注了 @Response 注解的方法
    • RequestResponseBodyMethodProcessor 调用 writeWithMessageConverters,利用 MessageConverter 把返回值写出去

上面解释: @ResponseBody 由 HttpMessageConverter 处理

2. WebMvcAutoConfiguration 提供几种默认的 HttpMessageConverters

在这里插入图片描述

系统提供默认的 MessageConverter 功能有限,仅用于 json 或者 普通返回数据。额外增加新的内容协商功能,必须增加新的 HttpMessageConverter

3. 如何增加其他

在这里插入图片描述

具体代码实现

https://gitee.com/wei-zhou-abc/springboot3-study

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

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

相关文章

Mysql篇-语句执行计划详解(explain)

概述 使用 explain 输出 SELECT 语句执行的详细信息,包括以下信息: 表的加载顺序 sql 的查询类型 可能用到哪些索引,实际上用到哪些索引 读取的行数 Explain 执行计划包含字段信息如下:分别是 id、select_type、table、partit…

.net 7.0 解决“The keyword field is required”的问题

在 .net 3.1项目的时候,使用 keyword 做 API 接口的模糊匹配,能够传入keyword “” 进行整表查询。但当我在 .net 7.0 项目中这么使用的时候,传入 keyword 不为空时能够进行匹配,但是当我传入 keyword “” 的时候就报错 “The …

高效语言模型 Parler-TTS 上线,一键完成文本转语音

Parler-TTS 是一种轻量级的文本转语音 (TTS) 模型,可以生成具有给定说话者风格的高质量、自然语音,自由度及创新性非常高,并且可以通过 Prompt 控制说话者的性别、音色、语调以及所处的场景(室内、室外、马路上、音乐厅等&#xf…

网络安全与防范

1.重要性 随着互联网的发达,各种WEB应用也变得越来越复杂,满足了用户的各种需求,但是随之而来的就是各种网络安全的问题。了解常见的前端攻击形式和保护我们的网站不受攻击是我们每个优秀fronter必备的技能。 2.分类 XSS攻击CSRF攻击网络劫…

JavaWeb——Maven、web入门

1. maven maven是一款用于管理和构建Java项目的工具,它基于项目对象模型(POM—Project Object Model)的概念,通过一小段描述信息来管理项目的构建。 1.1. 作用 1.1.1. 依赖管理 方便快捷的管理项目依赖的资源(jar包…

【前端学习笔记】Javascript学习二(运算符、数组、函数)

一、运算符 运算符(operator)也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号。 JavaScript中常用的运算符有: 算数运算符、递增和递减运算符、比较运算符、逻辑运算符、赋值运算符 算数运算符: 、-…

【开源免费】基于Vue和SpringBoot的智慧食堂系统(附论文)

本文项目编号 T 629 ,文末自助获取源码 \color{red}{T629,文末自助获取源码} T629,文末自助获取源码 随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化,网络化和电子化。网…

基因组之全局互作热图可视化

引言 PlotHiC 是一个专为 Hi-C 数据可视化分析而设计的 Python 包。Hi-C 技术是一种能够检测染色体三维结构的实验方法,它能揭示 DNA 在细胞核内的三维组织结构。为了更好地展示和解释这些复杂的数据,PlotHiC[1] 可以帮助用户方便地绘制Hi-C 数据的热图。…

道本科技智慧合同管理平台,采用数字化技术帮助企业建立全生命周期的合同管理模式。

作为专业的企业合同管理平台建设专家,我们拥有丰富的实施经验和专业技术团队,致力于帮助企业搭建高效、安全的合同管理系统。我们的解决方案涵盖合同起草、审批、存储、分析和报告等多个环节,能够满足不同企业的多样化需求。 选择我们&#…

AmazonS3集成minio实现https访问

最近系统全面升级到https,之前AmazonS3大文件分片上传直接使用http://ip:9000访问minio的方式已然行不通,https服务器访问http资源会报Mixed Content混合内容错误。 一般有两种解决方案,一是升级minio服务,配置ssl证书&#xff0c…

QGIS使用WMS图层

目录 参考链接 参考链接 [1] 使用 WMS 数据 (QGIS3) 2023.8;

华为防火墙技术基本概念学习笔记

1.防火墙概述 1.1防火墙与交换机、路由器对比 路由器与交换机的本质是转发,防火墙的本质是控制。 防火墙与路由器、交换机是有区别的。路由器用来连接不同的网络,通过路由协议保证互联互通,确保将报文转发到目的地;交换机则通常用来组建局域…

面向FWA市场!移远通信高性能5G-A模组RG650V-NA通过北美两大重要运营商认证

近日,全球领先的物联网整体解决方案供应商移远通信宣布,其旗下符合3GPP R17标准的新一代5G-A模组RG650V-NA成功通过了北美两家重要运营商认证。凭借高速度、大容量、低延迟、高可靠等优势,该模组可满足CPE、家庭/企业网关、移动热点、高清视频…

idea maven 重新构建索引

当设置maven仓库为离线模式的时候,会出现一些问题。 比如本地的仓库被各种方式手动更新之后, 举例:我需要一个spring的包,在pmo文件中写好了引入包的代码 但是由于是离线模式没有办法触发自动下载,那么这个时候我可以…

React(二)

文章目录 项目地址七、数据流7.1 子组件传递数据给父组件7.1.1 方式一:給父设置回调函数,传递给子7.1.2 方式二:直接将父的setState传递给子7.2 给props传递jsx7.2.1 方式一:直接传递组件给子类7.2.2 方式二:传递函数给子组件7.3 props类型验证7.4 props的多层传递7.5 cla…

项目管理的核心指南:四管八理

01项目管理核心:四管八理 项目管理的复杂性在于其多变的细节,但一旦掌握了核心框架和方法论,便能轻松应对。以下是项目管理的“四管八理”框架,旨在帮助项目经理构建自己的管理方法论。 02项目管理“四管” 1.团队协调 项目成功…

消防设施操作员高频考点

1、职业是指从业人员为获取主要生活来源所从事的社会工作类别。(正确) 2、职业活动以获得现金或实物等报酬为目的,这属于职业特征的(A)。 A、目的性 B、社会性 C、稳定性 D、规范性 解析:…

传输层协议TCP

一.TCP协议格式 对于传输层协议我们之前是学过了UDP,对于传输层协议是存在了一定的了解的,所以现在我们再来看TCP协议格式: 我们之前学过UDP的报文格式,所以源端口和目的端口是不需要进行再次讲解的,对于32序号和确认序…

【面试题】接口怎么测试?如何定位前后端的Bug?

接口怎么测试? 接口测试用来验证不同软件组件之间的交互是否正常。包括验证数据传输,参数传递,我在多个项目中有过测试接口的经验。(… 当进行接口测试时,会使用Postman和Python的Requests库。首先根据接口文档设计测…

【单点知识】基于PyTorch讲解自动编码器(Autoencoder)及其变种

文章目录 0. 前言1. 自动编码器的基本概念1.1 定义1.2 目标1.3 结构 2. PyTorch实现自动编码器2.1 导入必要的库2.2 定义自动编码器模型2.3 加载数据2.4 训练自动编码器 3. 自动编码器的意义4. 自动编码器的应用4.1 图像处理4.2自然语言处理:4.3推荐系统&#xff1a…