Java --- springboot3之web内容协商原理

news2024/11/27 19:48:32

一、内容协商原理

HttpMessageConverter

定制 HttpMessageConverter 来实现多端内容协商

编写WebMvcConfigurer提供的configureMessageConverters底层,修改底层的MessageConverter

@ResponseBodyHttpMessageConverter处理

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

1、如果controller方法的返回值标注了 @ResponseBody 注解

     🍕、请求进来先来到DispatcherServletdoDispatch()进行处理

     🍔、找到一个 HandlerAdapter 适配器。利用适配器执行目标方法

     🍟、RequestMappingHandlerAdapter来执行,调用invokeHandlerMethod()来执行目标方法。

     🌭、目标方法执行之前:①、HandlerMethodArgumentResolver:参数解析器,确定目标方法每个参数值。②、HandlerMethodReturnValueHandler:返回值处理器,确定目标方法的返回值改怎么处理。

     🧂、RequestMappingHandlerAdapter 里面的invokeAndHandle()真正执行目标方法。

     🥓、目标方法执行完成,会返回返回值对象。

     🥚、找到一个合适的返回值处理器 HandlerMethodReturnValueHandler

  🍳、最终找到 RequestResponseBodyMethodProcessor能处理 标注了 @ResponseBody注解的方法。

      🧇、RequestResponseBodyMethodProcessor 调用writeWithMessageConverters ,利用MessageConverter把返回值写出去。

2、HttpMessageConverter先进行内容协商

     🥞、遍历所有的MessageConverter看谁支持这种内容类型的数据。

     🧈、默认MessageConverter有以下

  

     

    🥨、最终因为要json所以MappingJackson2HttpMessageConverter支持写出json。

    🥯、jackson用ObjectMapper把对象写出去。

WebMvcAutoConfiguration提供几种默认HttpMessageConverters

 EnableWebMvcConfiguration通过 addDefaultHttpMessageConverters添加了默认的MessageConverter。

  •  ByteArrayHttpMessageConverter: 支持字节数据读写
    • StringHttpMessageConverter: 支持字符串读写
    • ResourceHttpMessageConverter:支持资源读写
    • ResourceRegionHttpMessageConverter: 支持分区资源写出
    • AllEncompassingFormHttpMessageConverter:支持表单xml/json读写
    • MappingJackson2HttpMessageConverter: 支持请求响应体Json读写

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

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

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

相关文章

蹭个高考热度,中国人民大学与加拿大女王大学金融硕士项目给你更多的选择

今日各大平台热搜都被“高考”霸屏,朋友圈里到处都是高考的祝福。期待莘莘学子都将交上满意的答卷,考出理想的未来。针对职场上的我们而言高考已是过去时,但知识的力量却是无穷的,在职的我们依然可以向上生长,中国人民…

FreeRTOS_任务相关API函数

目录 1. 任务创建和删除 API 函数 1.1 函数 xTaskCreate() 1.2 函数 xTaskCreateStatic() 1.3 函数 xTaskCreateRestricted() 1.4 函数 vTaskDelete() 2. 任务创建和删除实验(动态方法) 2.1 实验程序与分析 3. 任务创建和删除实验(静…

ZC-CLS381RGB颜色识别——配置寄存器组(上)

文章目录 前言一、ZC-CLS381RGB简介二、配置寄存器组1.主控寄存器2.检测速率寄存器2.增益寄存器2.颜色数据寄存器 三、状态转移图和信号波形图绘制总结 前言 在现代工业生产中,颜色识别技术已经成为了一个非常重要的技术。颜色识别可以用于产品质量检测、物料分类、…

特瑞仕|常见电子元器件的故障现象及原因详解

​电子元器件是现代电子设备中不可或缺的组成部分,但在长时间的使用过程中,它们也可能会出现各种故障现象。本文将详细介绍一些常见电子元器件的故障现象及原因,以帮助读者更好地理解和处理这些问题。 一、电阻器 故障现象:电阻值…

湖南人的商业策略:用“副产品免费”的模式,推动主产品消费

湖南人的商业策略:用“副产品免费”的模式,推动主产品消费 什么是副产品免费模式?(主产品要钱,副产品不要钱) 免费商业模型设计的核心就是通过延长产业链,以此来达到利润链条的延伸,在这个过程中衍生和挖掘…

1.8 掌握Scala函数

一、声明函数 (一)显式声明函数 案例演示 (1)加法函数 package net.huawei.day08import scala.io.StdIn/*** 功能:显式声明函数* 作者:* 日期:2023年03月20日*/ object Example01 {def add1…

测试用例设计方法之因果图详解

一、因果图概述 因果图是从需求中找出因(输入条件)和果(输出或程序状态的改变),通过分析输入条件之间的关系(组合关系、约束关系等)及输入和输出之间的关系绘制出因果图,再转化成判…

composer-创建自己的依赖库

1.环境 码云账号(或者GitHub)码云地址composer 官方仓库账号 Packagist composer官方仓库安装composer 2.步骤 2.1 发行composer的依赖包是需要从git 或者svn里拉取的,所以得先在码云里创建一个仓库 2.2 依赖包中必须有composer.json配置标明名字依赖等信息,配置大概如下,配…

Vue基础第五篇

一、动态组件 1.基本使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>动态组件</title><script src"https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></sc…

华为安全专家带你入门安全多方计算

安全多方计算 从0到1 6月8日&#xff08;本周四&#xff09; 19:00—21:00&#xff0c;华为安全专家带你入门安全多方计算&#xff0c;欢迎参加&#xff01; 考虑以下应用场景&#xff1a; Alice认为她可能患有某种遗传病&#xff0c;Bob有一个包含DNA模式与各类疾病的数据库。…

Hive执行计划之hive依赖及权限查询和常见使用场景

文章目录 概述1.explain dependency的查询与使用2.借助explain dependency解决一些常见问题2.1.识别看似等价的SQL代码实际上是不等价的&#xff1a;2.2 通过explain dependency验证将过滤条件在不同位置的查询区别 3.查看SQL操作涉及到的相关权限信息 概述 Hive查看执行计划的…

RocketMQ-Request-Reply特性

源码版本号:版本号:4.9.4 使用场景 随着服务规模的扩大&#xff0c;单机服务无法满足性能和容量的要求&#xff0c;此时需要将服务拆分为更小粒度的服务或者部署多个服务实例构成集群来提供服务。在分布式场景下&#xff0c;RPC是最常用的联机调用的方式。 在构建分布式应用…

高考季,17岁VS人工智能,谁的作文更胜一筹?

又到一年高考日。想起十二年前我也曾和众多莘莘学子一样,在这场人生的史诗里挣扎奋斗。 那时的我满怀着期待和焦虑,站在人生的岔口,茫然纠结该循哪条道路。十二年光阴荏苒,岁月如梭, 如今我已不复当年学子的面容,更无法回首当时的迷茫与彷徨。 时过境迁,我如今以另一种身份再…

flask+scrapy

管道数据库 class SpiderBookPipeline:def __init__(self):host localhostuser rootpassword hdp020820db 警察大学信息检索self.conn pymysql.connect(hosthost, useruser, passwordpassword, dbdb)self.cursor self.conn.cursor()def process_item(self, item, spider…

【Python】Python系列教程-- Python3 元组(十三)

文章目录 前言访问元组修改元组删除元组元组运算符元组索引&#xff0c;截取元组内置函数关于元组是不可变的 前言 往期回顾&#xff1a; Python系列教程–Python3介绍&#xff08;一&#xff09;Python系列教程–Python3 环境搭建&#xff08;二&#xff09;Python系列教程–…

项目中的Echarts图表统计

数据可视化 一、Echarts二、前端&#xff08;VueEcharts&#xff09;HomeView.vue&#xff08;完整代码&#xff09; 三、后端&#xff08;SpringBootMyBatis&#xff09;BorrowController.javaIBorrowService.javaBorrowService.javadatetimeToDateStr()函数countList()函数 B…

同样是产品经理 段位差别大

同样是产品经理&#xff0c;段位差别大 趣讲大白话&#xff1a;做人的差距大 【趣讲信息科技189期】 **************************** 市场越内卷 对产品的要求越来越高 不管叫不叫产品经理这个头衔 产品开发的重要性不会降低 《人人都是产品经理》总结的段位 姑且一看&#xff…

java线程多线程并发

文章目录 对java线程的认识wait&#xff08;&#xff09;和sleep&#xff08;&#xff09;区别&#xff1f;wait&#xff0c;notify为什么要放在同步代码块中&#xff1f; 多线程**什么时候使用多线程**&#xff1a;**多线程的优缺点**&#xff1a;**线程安全问题**&#xff1a…

MATLAB应用

目录 网站 智能图像色彩缩减和量化 网站 https://yarpiz.com/ 智能图像色彩缩减和量化 使用智能聚类方法&#xff1a;&#xff08;a&#xff09;k均值算法&#xff0c;&#xff08;b&#xff09;模糊c均值聚类&#xff08;FCM&#xff09;和&#xff08;c&#xff09;自组织神…

Mysql—存储过程

简介 存储过程就是类似于MySQL触发器&#xff0c;经过事先编写好相应语句&#xff0c;通过编译后存储在数据库上。触发器不需要手动调用即可实现相应SQL功能。MySQL存储过程&#xff0c;需要自己去调用得到相应的结果。 语法 创建存储过程 CREATE DEFINER CURRENT_USER PR…