Spring Boot 2.6.4 (5) - WebMvcAutoConfiguration (C 部分)

发布于:2024-10-24 编辑:匿名 来源:网络

3. Spring Boot Web MVC 自动配置 Spring Boot 官方文档 Web 模块自动配置说明 Spring MVC Auto-configurationSpring Boot 已自动配置 Spring MVC 可以使用 Web Starter 快速创建并运行。Spring Boot 官方文档列出了 MVC 的以下配置。

Spring Boot 为 Spring MVC 提供自动配置,适用于大多数应用程序。自动配置在 Spring 的默认设置之上添加了以下功能: 包含 ContentNegotiatingViewResolver 和 BeanNameViewResolver bean。

支持提供静态资源,包括对 WebJars 的支持(本文档稍后介绍)。自动注册 Converter、GenericConverter 和 Formatter beans。

支持 HttpMessageConverters(本文档稍后介绍)。自动注册 MessageCodesResolver(本文档稍后介绍)。

静态 index.html 支持。自动使用 ConfigurableWebBindingInitializer bean(本文档稍后介绍)。

视图解析器包含 ContentNegotiatingViewResolver 和 BeanNameViewResolver bean。视图解析器是自动配置的。

视图解析器的作用基于方法的返回值。对于视图对象,视图对象再决定是否需要转发或重定向。

查看resolver源码分析,入口是org.springframework.boot.autoconfigure.web.servlet包下的自动配置类WebMvcAutoConfiguration。所有 MVC 自动配置都属于此类。

此类包含三个返回视图解析器。方法,除了默认的defaultViewResolver方法外,另外两个是自动配置的ContentNegotiatingViewResolver和BeanNameViewResolver。

查看ContentNegotiatingViewResolver 的resolveViewName 方法如何解析视图。在resolveViewName方法中,通过getCandidateViews获取视图并保存在List of Views中。

getCandidateViews方法会遍历所有视图解析器来解析视图,并将解析后的视图保存到列表中。 ContentNegotiatingViewResolver类的作用是组合所有视图解析器来解析视图。

ContentNegotiatingViewResolver首先创建一个新的保存视图解析器列表,调用视图解析器的初始化方法,并通过BeanFactoryUtils获取所有视图解析器并保存在集合中。这样,我们就可以自己给容器添加一个视图解析器,自动添加到ContentNegotiatingViewResolver视图解析器列表中,自定义视图解析器实现代码语言: javascript copy public class LilithViewResolver Implements ViewResolver { @Override public ViewresolveViewName(String viewName, Locale locale) throws Exception { System.out.println("自定义视图解析器 LilithViewResolver");返回空值; }} 通过配置类将自定义视图解析器注册到Spring容器中 代码语言:javascript copy @Configurationpublic class ViewResolverConfig { // 将自定义视图解析器注册到Spring容器中的@Bean中 public ViewResolver lilithViewResolver(){ return new LilithViewResolver() ; }}调试以检查容器是否在视图解析器列表中,并在 doDispatch 方法上断点。

根据Debug信息,定制的视图解析器已经添加到视图解析器列表中。静态资源配置 支持提供静态资源,包括对 WebJars 的支持(本文档稍后介绍)。

静态资源的配置原理和使用请参考Spring Boot 2.6 .4(5) - Spring Boot在Web开发中静态资源的映射规则(A部分)自动注册Converter和Formatter formatter 自动注册 Converter、GenericConverter 和 Formatter beans。类型转换器的作用是将前端请求中的String类型数据转换为基本数据类型或者自定义对象; Formatter格式化的作用就是将String时间转换为Date类型自动配置类,在容器中添加一个组件FormattingConversionService。

该组件包括Converter 函数和Formatter 函数。自定义格式转换器首先定义一个注解@BoolFormat代码语言: javascript copy @Documented@Retention (RetentionPolicy.RUNTIME) @Target({ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER})public @interface BooleanFormat {}然后定义一个转换器类BooleanFormatter,继承Formatter接口,实现格式转换功能,并将该类注册到容器中。

该类会将values数组中的所有值转换为true,数组外的值转换为false。代码语言:javascript copy @Component public class BooleanFormatterimplementsFormatter { private Final String[]values = {"Yes", "YES", "Y", "yes", "Yes", "ok", “好的”、“好的”、“好的”、“哦”}; @Override public Boolean parse(String text, Locale locale){ return Arrays.asList(values).contains(text); } } @Override public String print(Boolean object , Locale locale) { return 对象 ? “真”:“假”;定义另一个工厂类 LilithBooleanFormatterFactory 并继承 AnnotationFormatterFactory 代码语言: javascript copy @Componentpublic class LilithBooleanFormatterFactory Implements AnnotationFormatterFactory { @Resource private BooleanFormatter booleanFormatter; @Override public Set> getFieldTypes() { Set> set=new HashSet<>(); } set.add(布尔值.claSS);返回集合; } @Override public Parser getParser(BooleanFormat 注解, Class fieldType) { return booleanFormatter; } @Override public Printer getPrinter(BooleanFormat 注释, Class fieldType) { return booleanFormatter; }}新建一个BoolController来测试格式转换器是否可以正常工作。

代码语言: javascript copy @RestController public class BoolController { @RequestMapping("/bool") public String Hallo(@BooleanFormat Boolean value){ return value.toString(); } }} 重新启动应用程序以测试值数组以外的值。传入ooook并返回false。

支持 HttpMessageConverters(本文档稍后介绍)。 Spring MVC 使用 HttpMessageConverter 接口来转换 HTTP 请求和响应。

Spring MVC 使用 HttpMessageConverter 来转换 HTTP 请求和响应 官方文档 自定义 HttpMessageConverter 自定义 HttpMessageConverter 的方式与自定义 ViewResolver 的方式相同。您只需将自定义的 HttpMessageConverter 添加到容器中即可。

Spring Boot如何自动配置HttpMessageConverter? WebMvcAutoConfiguration自动配置类中有一个WebMvcAutoConfigurationAdapter自动配置适配器。此类的参数化构造函数导入 HttpMessageConverter。

HttpMessageConverter 实现 Iterable> 接口。它从容器中获取所有的HttpMessageConverter,然后将它们添加到自动配置类中,以自动注册MessageCodesResolverAutomatic。

MessageCodesResolver 的注册(本文档稍后介绍)。 Spring MVC 有一个生成错误代码以从绑定错误渲染错误消息的策略:MessageCodesResolver。

如果您设置了 spring.mvc.message-codes-resolver-format 属性 PREFIX_ERROR_CODE 或 POSFIX_ERROR_CODE,Spring Boot 会为您创建一个属性(请参阅 DefaultMessageCodesResolver.Format 中的枚举)。主要用于定义错误代码生成规则,自动配置类Welcome页面配置中MessageCodeResolver的配置方法 Static index.html 支持。

欢迎页面的配置原理及使用请参考 Spring Boot 欢迎页面中的 Spring Boot 2.6.4 (5) - Web Develop (Part A) 自动使用 ConfigurableWebBindingInitializer 自动使用 ConfigurableWebBindingInitializer bean (涵盖本文档稍后)。关于自动配置类中ConfigurableWebBindingInitializer的定义,您可以自定义一个ConfigurableWebBindingInitializer来替换默认的。

getConfigurableWebBindingInitializer 方法首先会从容器中获取 ConfigurableWebBindingInitializer。如果找不到,则会调用父类的 getConfigurableWebBindingInitializer 方法。

父类中的这个方法是初始化所有的WebDataBinder。 WebDataBinder的作用是将请求数据转换成Java Bean。

initBinder是初始化WebDataBinder的方法。 org.springframework.boot.autoconfigure.web.servlet。

DispatcherServletAutoConfiguration包含Web模块的所有自动配置。

Spring Boot 2.6.4 (5) - WebMvcAutoConfiguration (C 部分)

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 通知:即日起,禁止携带Note 7登机,且不得作为航空货物托运或承运

    通知:即日起,禁止携带Note 7登机,且不得作为航空货物托运或承运

    中国民航局昨天发布公告,针对三星Galaxy Note 7手机出现的问题手机,为确保航空运输安全,自10月1日起,3月27日起,三星Galaxy Note 7手机不得携带登机,也不得托运。 具体规定为:旅客及船员严禁随身或手提行李中携带三星Galaxy Note 7手机;严禁将三星Galaxy Note 7手机放

    06-17

  • 李佳琦再次受到质疑,“全网最低价”谁说了算

    李佳琦再次受到质疑,“全网最低价”谁说了算

    双11的战线越来越长,促销方式越来越难懂,冲突也越来越早发生。 今年的商战是由京东发起的。 因花西子眉笔价格得罪网友后,李佳琦直播间再次陷入困境。 上次,一个新的货币计量单位“华西币”诞生了。 这一次,“全网最低价”应该被重新理解。 双11的“简单商战”,谁没说实

    06-21

  • 人造肉生产商v2food获3500万美元A轮融资

    人造肉生产商v2food获3500万美元A轮融资

    据投资界11月30日消息,澳大利亚植物性肉类替代品研发制造商v2food获3500万美元A轮融资,由联邦科学与工业研究组织 (Commonwealth Scientific and Industrial Research Organization) CSIRO 创新基金旗下资本部门 Main Sequence Ventures 出资,私人投资公司 Horizo??n Inve

    06-18

  • 广东设立半导体产业基金 规模110亿

    广东设立半导体产业基金 规模110亿

    天眼查App显示,近日,广东省半导体及集成电路产业股权投资基金二期合伙企业(有限合伙)成立,执行事务办公室为广东粤财基金管理有限公司。 公司投资额0.1亿元人民币,经营范围为私募股权基金从事股权投资、投资管理、资产管理等活动。 合伙人信息显示,该基金由广东粤财投资

    06-18

  • 沉浸式推理互动体验平台“戏剧侦探”获数百万天使融资,经纬中国投资

    沉浸式推理互动体验平台“戏剧侦探”获数百万天使融资,经纬中国投资

    据投资界5月15日消息,沉浸式推理互动体验平台“戏剧侦探”近日获得来自经纬中国的投资。 经纬中国天使轮融资100万元。 本轮融资主要用于产品研发、内容生态建设和团队建设。   剧探本质上是一个“内容+社交”的互动平台,构建强大的社交场景,用脚本驱动场景化社交。 目前

    06-18

  • 路透社:半导体集团 ASMI 预计 2022 年下半年营收增加

    路透社:半导体集团 ASMI 预计 2022 年下半年营收增加

    据路透社报道,荷兰半导体供应商 ASM International (ASMI) 周二预测 2022 年下半年营收增加,因为预计上半年供应链问题将持续存在。 ASMI 在一份声明中表示:“根据目前的情况,我们预计下半年的收入将高于上半年。 ”英特尔和应用材料等半导体集团受到供应链挑战的打击,尽

    06-08

  • 西瓜视频已与BBC、Discovery达成内容合作,独家播出纪录片《哈勃三十年》

    西瓜视频已与BBC、Discovery达成内容合作,独家播出纪录片《哈勃三十年》

    纪录片将成为西瓜视频内容布局的另一重点。 4月22日,西瓜视频与BBC Studios宣布达成内容合作。 双方将共同制作两部新纪录片:《哈勃三十年:揭示宇宙奇观》和《灵长王国》。 同时,BBC将为西瓜视频提供数百部纪录片内容。 西瓜视频还携手另一部纪录片《发现巨头》。 西瓜视频

    06-18

  • 看亚洲之星:现代KOL开创了赢得和影响客户的新方式

    看亚洲之星:现代KOL开创了赢得和影响客户的新方式

    2016年,杭言浩回到家乡马来西亚槟城岛,亲眼目睹了年轻人如何依靠互联网追名逐利,财富,甚至能够靠它谋生。 在互联网上,任何人都可以成为明星15分钟——只需要一段成功的TikTok(抖音海外版)视频。 “然而,真正的影响力是明确自己的独特性,并为他人提供宝贵的知识和经

    06-18

  • 中期协:今年第一季度我国期货市场成交额同比增长83.08%

    中期协:今年第一季度我国期货市场成交额同比增长83.08%

    中国中期协会:今年一季度,我国期货市场成交量同比增长83.08%。 今年一季度,我国期货市场累计交易量18.49亿手,累计成交额0.36万亿元,同比分别增长69.86%和83.08%。 %。 其中,钢材、化工品、油脂、能源等期货品种交易量同比快速增长。 数据还显示,今年3月份全国期货市场

    06-18

  • 据美通社报道,生物科技公司Adcentrx Therapeutics于4月29日宣布完成由剑桥资本

    据美通社报道,生物科技公司Adcentrx Therapeutics于4月29日宣布完成由剑桥资本

    投资社区(ID:pedaily)领投的5000万美元A轮融资,重点关注突破性抗体偶联药物(“Adcentrx”) ADC旗下生物科技公司Therapeutics(“Adcentrx”)宣布完成1万美元A轮融资。 本轮融资由康桥资本领投,博裕资本旗下早期投资平台万物资本跟投。 此次融资将加速Adcentrx在ADC领

    06-18

  • 【话题互动获奖名单&精选点评】开源大模型如何帮助创业项目打造竞争力?

    【话题互动获奖名单&精选点评】开源大模型如何帮助创业项目打造竞争力?

    亲爱的参与者,感谢您参与我们的互动话题“开源大模型如何帮助创业项目打造竞争力?”在这次活动中收到的许多热情的回应和观点给我们带来了启发。 再次感谢您的支持和参与,期待在以后的活动中见到您!这些是本主题讨论中精选的评论。 我们深感荣幸并衷心感谢大家的热情分享。

    06-17

  • 全景影像技术研发公司Insta360获数亿元C+轮融资,拟在A股上市

    全景影像技术研发公司Insta360获数亿元C+轮融资,拟在A股上市

    据投资界3月20日消息,全景影像科技研发公司Insta获得数亿元C+轮融资。 本轮投资方包括迈高控股、华金资本、浪美创投等。 本轮资金将用于产品研发、营销和渠道拓展,提升品牌影响力。 此前,Insta曾于今年3月获得迅雷网络、启明创投、IDG投资的数亿元B轮融资,并于同年7月获得

    06-17