SpringBoot中的WebMvcConfigurer

SpringBoot中的WebMvcConfigurer

  • 一、WebMvcConfigurer
  • 二、页面跳转控制器
  • 三、数据格式化
    • 1.Formatter\<T>
    • 2.内容转换器
  • 四、拦截器


一、WebMvcConfigurer

  • WebMvcConfigurer 作为配置类,采用 JavaBean 的形式来代替传统的 XML 配置文件形式,进而针对框架个性化定制。就是 SpringMVC 的 XML 配置文件的 JavaConfig(编码)实现方式。自定义 Interceptor、ViewResolver、MessageConverter。WebMvcConfigurer 就是 JavaConfig 形式的 SpringMVC 的配置文件。
  • WebMvcConfigurer 是一个接口,需要自定义一个对象,实现接口并覆盖某个方法。
public interface WebMvcConfigurer {// 帮助配置 HandlerMappingdefault void configurePathMatch(PathMatchConfigurer configurer) {}// 处理内容协商default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {}// 异步请求default void configureAsyncSupport(AsyncSupportConfigurer configurer) {}// 配置默认 Servletdefault void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {}// 配置内容转换器default void addFormatters(FormatterRegistry registry) {}// 配置拦截器default void addInterceptors(InterceptorRegistry registry) {}// 处理静态资源default void addResourceHandlers(ResourceHandlerRegistry registry) {}// 配置全局跨域default void addCorsMappings(CorsRegistry registry) {}// 配置视图页面跳转default void addViewControllers(ViewControllerRegistry registry) {}// 配置视图解析器default void configureViewResolvers(ViewResolverRegistry registry) {}// 自定义参数解析器,处理请求参数default void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {}// 自定义控制器方法返回值处理器default void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {}// 配置 HttpMessageConvertersdefault void configureMessageConverters(List<HttpMessageConverter<?>> converters) {}// 配置 HttpMessageConvertersdefault void extendMessageConverters(List<HttpMessageConverter<?>> converters) {}// 配置异常处理器default void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {}// 扩展异常处理器default void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {}// JSR303 的自定义验证器@Nullabledefault Validator getValidator() {return null;}// 消息处理对象@Nullabledefault MessageCodesResolver getMessageCodesResolver() {return null;}
}

二、页面跳转控制器

  • SpringBoot 中使用页面视图,比如 Thymeleaf。要跳转显示某个页面,必须通过 Controller 对象。也就是我们需要创建一个 Controller,转发一个视图才行。如果我们现在需要显示多个页面,可以无需这个 controller。addViewControllers() 完成请求到视图跳转。
  • ① 创建一个视图:login.html
    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><title>登录页面</title>
    </head>
    <body><h1 style="color: red; text-align: center">欢迎来到登录页面!!!</h1>
    </body>
    </html>
    
  • ② 创建 SpringMVC 配置类
    @Configuration
    public class MvcSetting implements WebMvcConfigurer {// 跳转页面视图@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/login").setViewName("/login");}
    }
    

③ 结果展示
在这里插入图片描述


三、数据格式化

1.Formatter<T>

  • Formatter<T> 是数据转换接口,将一种数据类型转换为另一种数据类型。与 Formatter<T> 功能类似的还有 Converter<S, T>。Formatter<T> 只能将 String 类型转为其他数据类型。 这点在 Web 应用中适用广泛。因为 Web 请求的所有参数都是 String 类型的,我们需要把 String 转为 Integer、Long、Date 等等。
  • Spring 中内置的一些 Formatter<T>:
    • DateFormatter:String 和 Date 之间的解析与格式化。
    • InetAddressFormatter:String 和 InetAddress 之间的解析与格式化。
    • PercentStyleFormatter:对百分数进行一个格式化。
    • NumberFormatter:String 和 Number 之间的解析与格式化。
  • 我们在使用 @DateTimeFormat、@Numberformat 注解时,就是通过 Formatter<T> 解析 String 类型到我们期望的 Date 或 Number 类型。
  • Formatter<T> 也是 Spring 的扩展点,我们处理特殊格式的请求数据时,能够自定义合适的 Formatter<T>,将请求的 String 数据转为我们的某个对象,使用这个对象更加方便我们后续的编码。
    public interface Formatter<T> extends Printer<T>, Parser<T> {
    }
    
  • Formatter<T> 是一个组合接口,没有自己的方法。内容来自 Printer<T> 和 parse<T> 两个接口。
    • Printer<T>:将 T 类型转为 String,格式化输出。

      @FunctionalInterface
      public interface Printer<T> {String print(T object, Locale locale);
      }
      
    • Parser<T>:将 String 类型转为期望的 T 对象。

      @FunctionalInterface
      public interface Parser<T> {T parse(String text, Locale locale) throws ParseException;
      }
      

2.内容转换器

  • 我们在实际的项目开发中,可能面对多种类型的项目,复杂程度有简单,有复杂的。特别是和硬件打交道的项目,数据的格式与一般的 name:jack,age:20 不同。数据有可能是一串数据 “1345;46;dfd;ASDS;12DF;df&12”
  • ① 自定义 Formatter
    public class DeviceInfoFormatter implements Formatter<List<String>> {@Overridepublic List<String> parse(String text, Locale locale) throws ParseException {String[] infos = text.split(";");List<String> stringList = Arrays.asList(infos);return stringList;}@Overridepublic String print(List<String> object, Locale locale) {return object.toString();}
    }
    
  • ② 登记内容转换器
    @Configuration
    public class MvcSetting implements WebMvcConfigurer {// 跳转视图页面控制器@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/login").setViewName("/login");}// 登记内容转换器@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addFormatter(new DeviceInfoFormatter());}
    }
    
  • ③ 创建 Controller 接收请求
    @Controller
    public class DeviceController {@ResponseBody@PostMapping("/device/postInfo")public String postDeviceInfo(@RequestParam("deviceInfo")List<String> list){return list.toString();}
    }
    
  • ④ 测试与结果展示
    在这里插入图片描述

四、拦截器

  • HandlerIntercepter 接口和它的实现类被称为拦截器,是 SpringMVC 的一种对象。拦截器是 SpringMVC 框架提供的对象与 Servlet 无关。拦截器能够预先处理发给 Controller 的请求。可以决定请求是否被 Controller 处理。用户请求是先由 DispatchServlet 接收后,在 Controller 之前执行的拦截器对象。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rclone基础命令解析及实战

rclone命令解析及实战 1 rclone介绍&#xff1a;远程同步工具 rclone是一个开源的远程数据同步工具&#xff0c;由Golang编写&#xff0c;旨在在不同平台的文件系统和多种类型的对象存储产品之间提供数据同步功能。 它支持超过 40 种不同的云存储服务&#xff0c;包括 Amazon S…

Qt环境搭建+简单程序实现

Qt是什么 Qt是一个跨平台的C图形用户界面应用程序框架。 框架的本质就是一群大佬发明的让菜鸡写出来的代码也也比较规范 也就是限制程序员的自由&#xff0c;让程序员写出来的代码规范。 库和框架有相似性。 库是被程序员调用的&#xff0c;&#xff08;程序员是主体&…

【已解决】青龙面板依赖安装失败原因

青龙面板必须安装依赖&#xff0c;才可以执行脚本&#xff0c;这是不争的事实。 如果脚本跑不起来&#xff0c;就去看看依赖吧。 NodeJs 依赖如下 axios request canvas cheerio js-base64 dotenv magic tough-cookie ws7.4.3 require requests date-fns ts-md5 typescript j…

已解决error: subprocess-exited-with-error

已解决&#xff08;pip安装第三方模块lxml模块报错&#xff09;Building wheels for collected packages: lxml Building wheel for lxml (setup.py) … error error: subprocess-exited-with-error python setup.py bdist_wheel did not run successfully. note: This error o…

Polar-Net:通过 OCTA(光学相干断层扫描血管成像)检测阿尔茨海默病

通过OCTA&#xff08;光学相干断层扫描血管成像&#xff09;检测阿尔茨海默病 主问题&#xff1a;如何通过OCTA图像有效地检测阿尔茨海默病&#xff1f;子问题1&#xff1a;如何在深度学习模型中模拟临床实践中常用的区域基础分析方法&#xff1f;子问题2&#xff1a;如何在网络…

【字符串】字典树

字典树就是利用一个这样的树状结构&#xff0c;可以记录字符串有没有出现过 放个板子 int nxt[100000][26], cnt; bool st[100000]; // 该结点结尾的字符串是否存在 void insert(string s, int l) // 插入字符串&#xff0c;l是字符串长度 { int p 0;for (int i 0; i < …

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(九)

原文&#xff1a;Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 附录 A&#xff1a;机器学习项目清单 此清单可以指导您完成机器学习项目。有八个主要步骤&#xff1a; 构建问题并全局看问题。 …

sql求解连续两个以上的空座位

Q&#xff1a;查找电影院所有连续可用的座位。 返回按 seat_id 升序排序 的结果表。 测试用例的生成使得两个以上的座位连续可用。 结果表格式如下所示。 A:我们首先找出所有的空座位&#xff1a;1&#xff0c;3&#xff0c;4&#xff0c;5 按照seat_id排序&#xff08;上面已…

LeetCode、746. 使用最小花费爬楼梯【简单,动态规划 线性DP】

文章目录 前言LeetCode、746. 使用最小花费爬楼梯【简单&#xff0c;动态规划 线性DP】题目与分类思路 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。…

手拉手Vue3+vite引入echarts

技术栈springboot3hutool-alloshi-coreVue3viteechartsTailwindCSS软件版本IDEAIntelliJ IDEA 2022.2.1JDK17Spring Boot3.1hutool-all5.8.18oshi-core6.4.1Vue35.0.10vite5.0.10axios1.6.7echarts5.4.3 ECharts是一个使用 JavaScript 实现的开源可视化库&#xff0c;可以流畅…

云计算运维1

1、企业服务器LNMP环境搭建 集群&#xff1a;多台服务器在一起作同样的事 。分布式 &#xff1a;多台服务器在一起作不同的事 。 环境准备&#xff1a; 1、设置静态ip&#xff08;NAT模式网关为.2&#xff09; # cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE"E…

Matplotlib 绘图实践:从基础到高级技巧【第62篇—python:Matplotlib绘图】

文章目录 Matplotlib绘图模块基础入门大全1. 安装Matplotlib2. 绘制基本图形3. 自定义图形样式4. 多子图布局5. 高级绘图技巧6. 绘制实时动态图7. 图形注释与标记8. 颜色映射与散点图9. 绘制直方图10. 绘制饼图11. 绘制热力图 总结 Matplotlib绘图模块基础入门大全 Matplotlib…