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 {
	// 帮助配置 HandlerMapping
	default void configurePathMatch(PathMatchConfigurer configurer) {}
	// 处理内容协商
	default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {}
	// 异步请求
	default void configureAsyncSupport(AsyncSupportConfigurer configurer) {}
	// 配置默认 Servlet
	default 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) {}
	// 配置 HttpMessageConverters
	default void configureMessageConverters(List<HttpMessageConverter<?>> converters) {}
	// 配置 HttpMessageConverters
	default void extendMessageConverters(List<HttpMessageConverter<?>> converters) {}
	// 配置异常处理器
	default void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {}
	// 扩展异常处理器
	default void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {}
	// JSR303 的自定义验证器
	@Nullable
	default Validator getValidator() {
		return null;
	}
	// 消息处理对象
	@Nullable
	default 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 {
    	// 跳转页面视图
        @Override
        public 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>> {
    
        @Override
        public List<String> parse(String text, Locale locale) throws ParseException {
            String[] infos = text.split(";");
            List<String> stringList = Arrays.asList(infos);
            return stringList;
        }
    
        @Override
        public String print(List<String> object, Locale locale) {
            return object.toString();
        }
    }
    
  • ② 登记内容转换器
    @Configuration
    public class MvcSetting implements WebMvcConfigurer {
        // 跳转视图页面控制器
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
    
            registry.addViewController("/login").setViewName("/login");
    
        }
        // 登记内容转换器
        @Override
        public 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 之前执行的拦截器对象。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】文件周边002之初步理解文件管理(打开的文件)

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.&#xff08;打开…

SSH免密切换服务器案例-ssh协议(公钥和私钥)

公钥和私钥理解 公钥提供加密&#xff0c;私钥解密&#xff0c;公钥可以共享&#xff0c;私钥不可以。举例公钥相当于锁头&#xff0c;可以给别人用&#xff0c;钥匙相当于私钥&#xff0c;只能开自己发出去的锁头&#xff0c;也就是私钥和公钥成对&#xff0c;私钥只能解密对…

Go指针探秘:深入理解内存与安全性

目录 1. 指针的基础1.1 什么是指针&#xff1f;1.2 内存地址与值的地址1.2.1 内存中的数据存储1.2.2 如何理解值的地址 2. Go中的指针操作2.1 指针类型和值2.1.1 基本数据类型的指针2.1.2 复合数据类型的指针 2.2 如何获取一个指针值2.3 指针&#xff08;地址&#xff09;解引用…

框架学习Maven

声明&#xff1a;本文来源于黑马程序员PDF讲义 做为一名Java开发工程师&#xff0c;后端 Web开发技术是我们学习的重点&#xff0c;后端Web开发技术的学习&#xff0c;我们会先学习Java项目的构建工具&#xff1a;Maven 初识Maven Maven是Apache旗下的一个开源项目&#xff…

建筑行业数字化:从设计到运维的全面革新

随着科技的快速发展&#xff0c;数字化技术在各行各业中的应用越来越广泛。建筑行业作为传统产业&#xff0c;也在积极拥抱数字化技术&#xff0c;以提高效率、降低成本并实现可持续发展。本文将主要探讨建筑行业数字化的几个关键领域&#xff0c;包括建筑设计数字化、施工管理…

【爬虫作业】python爬虫作业——爬取汽车之家

爬取汽车之家期末作业&#xff1a; 代码如下所示&#xff1a; import random import timeimport requests #发送网络请求 import parsel import csv # 1.发送网络请求 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like G…

LFU缓存(Leetcode460)

例题&#xff1a; 分析&#xff1a; 这道题可以用两个哈希表来实现&#xff0c;一个hash表&#xff08;kvMap&#xff09;用来存储节点&#xff0c;另一个hash表&#xff08;freqMap&#xff09;用来存储双向链表&#xff0c;链表的头节点代表最近使用的元素&#xff0c;离头节…

APN设置流程分析

源码流程分析 前期概要 此流程分析是在不同平台可能不一致,只能作为参考文档,是属于一个通用流程文档。 源码分析 入口 首先是界面,我在此平台的界面如下: 对应的入口源码位置在Settings的ApnSettings中

CAN通信----(创芯科技)CAN分析仪----转CANTest使用

点击进入官方链接进行下载创芯科技 CAN分析仪资料包&#xff1a; 创芯科技的官网&#xff1a;https://m.zhcxgd.com/ 我使用的是至尊版红色带OBD转接头的&#xff1a; 所有下图是我选择…

企业网络采用SD-WAN的优势

近年来&#xff0c;SD-WAN成为企业网络领域的一项热门技术&#xff0c;为传统网络带来了新的变革。SD-WAN&#xff08;Software Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;以其灵活性、可管理性和低成本而备受青睐。它不仅能够创建成熟的专用网络&#…

对多面体数据进行裁剪和加盖的功能

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example demo解决问题&#xff1a;对多面体数据进行裁剪和加盖的功能。 关键点&#xff1a; 创建了一个平面&#xff0c;并将其定位在输入多面体数据的中心位置&#xff…

Transformer实战-系列教程7:SwinTransformer 算法原理 1

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 1、SwinTransformer SwinTransformer 可以看作为一个backbone用来做分类、检测、分割都是非常好…

目标检测:3采用YOLOv8 API训练自己的模型

​ 目录 ​1.YOLOv8 的新特性 2.如何使用 YOLOv8? 3使用YOLOv8训练模型 4.验证训练集 5.测试训练集 6.测验其他图片 7 其他问题 参考: 1.YOLOv8 的新特性 Ultralytics 为 YOLO 模型发布了一个全新的存储库。它被构建为 用于训练对象检测、实例分割和图像分类模型的统…

什么是Vue样式穿透以及常用的实现方法

在Web前端开发中&#xff0c;样式穿透是一个重要的主题&#xff0c;它可以帮助我们更好地定制化组件样式&#xff0c;提升用户体验。本文将为您介绍Vue中样式穿透的概念&#xff0c;以及几种常用的实现方法&#xff0c;希望对您的前端开发工作有所帮助。 什么是样式穿透&#…

Java on Azure Tooling 2024年1月更新|Azure Key Vault 支持、示例项目创建支持及更多

作者&#xff1a;Jialuo Gan - Program Manager, Developer Division At Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎来到 2024 年 Java on Azure 工具的首次更新。在本次更新中&#xff0c;我们将介绍对于 Azure Key Vault 支持、基于 Azure 示例项目的创建支…

JavaWeb之HTML-CSS --黑马笔记

什么是HTML ? 标记语言&#xff1a;由标签构成的语言。 注意&#xff1a;HTML标签都是预定义好的&#xff0c;HTML代码直接在浏览器中运行&#xff0c;HTML标签由浏览器解析。 什么是CSS ? 开发工具 VS Code --安装文档和安装包都在网盘中 链接&#xff1a;https://p…

服务器性能监控管理方法及工具

服务器是组织数据中心的主干&#xff0c;无论是优化的用户体验&#xff0c;还是管理良好的资源&#xff0c;服务器都能为您完成所有工作&#xff0c;保持服务器随时可用和可访问对于面向业务的应用程序和服务以最佳水平运行至关重要。 理想的服务器性能需要主动监控物理和虚拟…

Jvm FullGC 如何排查?

使用场景 我们在使用系统时&#xff0c;有时请求和响应会变得特别慢&#xff0c;系统也变得很卡。 有可能是FullGC的问题&#xff0c;可以逐步地进行排查。 使用jps和top确定进程号pid jps可以列出正在运行的jvm进程&#xff0c;并显示jvm执行主类名称( main()函数所在的类…

第5课 使用FFmpeg将rtmp流再转推到rtmp服务器

本课对应源文件下载链接&#xff1a; https://download.csdn.net/download/XiBuQiuChong/88801992 通过前面的学习&#xff0c;我们已经可以正常播放网络rtmp流及本地mp4文件。这节课&#xff0c;我们将在前面的基础上实现一个常用的转推功能&#xff1a;读取rtmp流或mp4文件并…

移动云ONAIR媒体云全解读!媒体内容数字化融合一站式解决方案

当下&#xff0c;传统媒体面临着诸多挑战&#xff0c;如何利用信息技术提升内容的质量、形式和分发效率&#xff0c;成为媒体行业的迫切需求。移动云作为数字中国建设的“主力军”&#xff0c; 立足于新兴媒体与云计算市场的变化与需求&#xff0c;推出了ONAIR 媒体云解决方案&…