通知:即日起,禁止携带Note 7登机,且不得作为航空货物托运或承运
06-17
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
代码语言: 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
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模块的所有自动配置。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-21
06-18
06-18
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用