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 部分)

站长声明

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

标签:

相关文章

  • 用GPT-4这样的大模型玩狼人杀,人类因为太蠢被投票判死,真正的逆向图灵测试

    用GPT-4这样的大模型玩狼人杀,人类因为太蠢被投票判死,真正的逆向图灵测试

    在这篇文章中,我们看到了人工智能如何与经典的社交推理游戏互动《狼人杀》结合创造了一个有趣的实验。 视频展示了亚里士多德、克利奥帕特拉等以历史人物为模型的人工智能 NPC 与人类玩家互动的场景。 人类玩家因答案不够复杂而被淘汰,颠覆了传统的图灵测试。 本文探讨了 AI

    06-17

  • 杭州出台25条措施加快生物医药产业高质量发展

    杭州出台25条措施加快生物医药产业高质量发展

    日前,杭州市人民政府办公厅发布《关于加快生物医药产业高质量发展若干措施的通知》。 该措施自2020年11月15日起实施,有效期至2020年12月31日。 该措施重点支持药品、高端医疗器械、先进制药装备、新型服务外包、数字医学、医学美容。 措施全文如下: 关于加快生物医药产业高

    06-18

  • 14nm写入上海市政府工作报告:今年实现量产

    14nm写入上海市政府工作报告:今年实现量产

    1月27日,上海市第十五届人民代表大会第二次会议正式开幕。 上海市市长应勇作政府工作报告。 报告中回顾了2017年上海发展现状,部署了全年重点工作和任务。 上海作为国家集成电路产业的重要集聚区,在年度政府工作报告中多处提及集成电路。 应勇在回顾一年来的工作时表示,“

    06-06

  • 海外呼叫中心服务:连接全球市场的桥梁

    海外呼叫中心服务:连接全球市场的桥梁

    .wp-block-column h3{margin-left:0} 1.引言 在全球化背景下,越来越多的企业开始寻求拓展海外市场。 随着国际贸易的日益频繁和跨境电商的兴起,海外呼叫中心服务作为连接企业与海外客户的重要桥梁,正逐渐受到越来越多企业的关注。 本文将对海外呼叫中心服务的定义、重要性、

    06-17

  • 库克谈苹果可持续发展计划:我们必须做得好,别人才想效仿 - Feel Good Weekly

    库克谈苹果可持续发展计划:我们必须做得好,别人才想效仿 - Feel Good Weekly

    Feel Good简介 苹果:我们的可持续发展计划必须好到让人想“复制” MINI推出首款电动自行车 lululemon:更多中国消费者正在积极探索“Good Condition”最新快闪店“雀巢咖啡,使用后可以回收。 无畏:为旅程提供气候标签的第一步苹果:我们必须可持续“复制”最“绿色”的秋季

    06-21

  • 猫生活领先品牌Pidan完成B+轮融资,兴旺投资独家领投,

    猫生活领先品牌Pidan完成B+轮融资,兴旺投资独家领投,

    据7月5日消息,近日,猫生活领先品牌Pidan完成B+轮融资,兴旺投资独家领投。 Pidan品牌起源于法国巴黎。 以其高品质、高设计的宠物产品多次荣获德国红点奖。 Pidan独创混合猫砂品类,在天猫猫砂品类中排名第一。 Pidan瞄准“猫市场”,将自己定位为全品类宠物生活方式品牌。

    06-17

  • Village Fund将于今晚在纽约证券交易所上市,沈南鹏称值得长期投资

    Village Fund将于今晚在纽约证券交易所上市,沈南鹏称值得长期投资

    中式快餐连锁乡村基金今晚将在纽交所上市,成为首家中式餐饮企业。 红杉资本中国基金创始人兼高管合伙人沈南鹏在接受新浪财经独家采访时表示,他被乡村基金的“深刻印象”所吸引。 它的快速增长才刚刚开始,值得他长期投资。   Village Base是一家以美味川菜为主,与当地风

    06-18

  • 二氧化硅龙头确辰硅化主板挂牌,盈科资本IPO再获丰收

    二氧化硅龙头确辰硅化主板挂牌,盈科资本IPO再获丰收

    12月7日,确辰硅化(83.SH)在上交所正式挂牌上市。 截至目前,盈科资本年度IPO项目总数已达14个,其中科创板6个、创业板4个、主板3个、港交所1个。 同期IPO数量继续保持行业领先地位。 作为全球前三、亚洲第一的二氧化硅行业领军企业,确成硅化现已形成从原料硫酸、水玻璃到

    06-18

  • 南芯半导体完成数千万元A轮融资,顺为资本领投

    南芯半导体完成数千万元A轮融资,顺为资本领投

    据投资界1月23日消息,高性能模拟芯片半导体公司南芯半导体完成数千万元A轮融资处于A轮融资中。 本轮融资由顺为资本领投,兴业资本海逸、紫米科技跟投。 南芯也是顺为资本投资的第一家芯片设计公司。   南芯半导体成立于2001年,主要从事集成电路芯片的研究、设计、开发和销

    06-18

  • 春华资本宣布收购美赞臣大中华区业务

    春华资本宣布收购美赞臣大中华区业务

    春华资本宣布与利洁时签署最终协议,收购利洁时美赞臣大中华区业务,并将拥有美赞臣品牌在大中华区市场的永久权益此次独家使用权将从业务创新、运营完善、渠道优化、数字化转型等方面支持美赞臣未来在中国的发展。

    06-17

  • 英伟达需要警惕的对手来了

    英伟达需要警惕的对手来了

    市值超1.7万亿美元的AI军火商英伟达开始感受到“危机”,需要警惕各类“对手” 。 日前,有消息称孙正义计划筹集1亿美元创建一家AI芯片公司,旨在挑战英伟达。 近日,AI芯片初创公司Groq也透露出颠覆英伟达的意图。 NVIDIA在AI芯片市场上无可匹敌。 本财年,NVIDIA的销售额连

    06-18

  • 春节“医美”热潮,爱美客和昊海生科谁更赚钱?

    春节“医美”热潮,爱美客和昊海生科谁更赚钱?

    在外表经济的轨道上,医美项目逐渐成为消费主流。 随着春节假期的到来,医美的消费将迎来又一个高峰期。 “医美三剑客”中,爱美客(96.SZ)和昊海生科(66.SH)近日公布了2020年业绩报告:2020年,爱美客预计实现净利润18.10亿元至1.900元亿元,同比增长43%-50%;昊海生科预

    06-17