WebMvcConfigurer自定义配置

1. WebMvcConfigurer(轻量级扩展配置)

1.1 简介

WebMvcConfigurer 是 Spring 提供的接口,用于扩展 Spring MVC 的默认行为。它是一种非侵入式的配置方式,可以轻松地进行各种自定义配置,如拦截器、消息转换器、跨域设置等。实现 WebMvcConfigurer 不会影响 Spring Boot 的自动配置,是最常见的扩展方式。

1.2 常用功能

  • 自定义拦截器:通过实现 addInterceptors 方法添加拦截器。
  • 自定义消息转换器:通过 extendMessageConverters 方法扩展消息转换器。
  • 跨域配置:通过 addCorsMappings 来配置跨域资源共享(CORS)。
  • 静态资源配置:通过 addResourceHandlers 自定义静态资源的路径。

1.3 使用场景

WebMvcConfigurer 适合大部分场景,可以满足自定义消息转换器、静态资源映射、拦截器等常见需求,且不会影响 Spring Boot 的自动配置。

2. WebMvcConfigurationSupport(深度定制配置)

2.1 简介

WebMvcConfigurationSupport 是 Spring MVC 的一个配置基类,通常用于完全接管 Spring MVC 的配置。继承这个类后,Spring Boot 自动配置将被禁用,因此它适用于需要完全控制 Spring MVC 行为的场景。

2.2 常用功能

  • 深度定制 Spring MVC 行为:继承该类后,所有 Spring MVC 的配置都需要手动定义,包括视图解析器、消息转换器、拦截器等。
  • 完全覆盖 Spring MVC 默认配置:Spring Boot 的自动配置会失效,需要自行配置所有必要的 MVC 组件。

2.3 使用场景

  • 需要完全掌控 Spring MVC 行为的复杂场景。
  • WebMvcConfigurer 不能满足定制需求时(如需要重写默认的 MVC 配置)。

注意:继承 WebMvcConfigurationSupport 会导致 Spring Boot 的自动配置失效,因此大部分开发中更推荐使用 WebMvcConfigurer

3. 示例

通过实现WebMvcConfigurer接口的 extendMessageConverters 方法扩展消息转换器。

自定义消息转换器(日期格式处理):

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.fasterxml.jackson.databind.ObjectMapper;@Configuration // 表明这是一个 Spring 配置类,Spring 容器会自动扫描并加载该配置
public class WebConfig implements WebMvcConfigurer {/*** 扩展 Spring MVC 框架的消息转换器* 这里是通过自定义 Jackson 的 `MappingJackson2HttpMessageConverter` 来处理 JSON 数据* 并为其设置自定义的日期格式* * @param converters Spring MVC 自动传入的消息转换器列表*/@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {// 输出日志,提示消息转换器正在被扩展log.info("扩展消息转换器...");// 创建一个 JSON 消息转换器对象MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();// 创建一个 ObjectMapper(这是 Jackson 用于将 Java 对象和 JSON 相互转换的工具类)ObjectMapper objectMapper = new ObjectMapper();// 设置日期格式为 "yyyy-MM-dd HH:mm:ss",即:2024-10-15 12:34:56objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));// 将配置好的 ObjectMapper 设置到消息转换器中converter.setObjectMapper(objectMapper);// 将自定义的消息转换器添加到转换器列表的最前面// 这样 Spring MVC 会优先使用这个自定义的转换器converters.add(0, converter);}
}

详细解释

  1. @Configuration 注解
    该注解表明 WebConfig 是一个配置类,Spring 会在启动时自动加载该类并执行其中的配置逻辑。

  2. WebMvcConfigurer 接口
    这是一个用于扩展和自定义 Spring MVC 行为的接口,不会覆盖 Spring 的默认配置。这里实现了 extendMessageConverters 方法,主要是为了自定义消息转换器。

  3. extendMessageConverters(List<HttpMessageConverter<?>> converters) 方法

    • 这个方法允许在 Spring MVC 的默认消息转换器列表中插入或替换自定义的消息转换器。
    • converters 参数是 Spring MVC 默认提供的消息转换器列表。
  4. MappingJackson2HttpMessageConverter
    这是一个专门用于将 Java 对象转换为 JSON 格式,以及将 JSON 解析为 Java 对象的消息转换器。Spring 默认使用 Jackson 作为 JSON 序列化和反序列化的工具。

  5. ObjectMapper

    • Jackson 的核心类,用于配置和执行对象和 JSON 之间的相互转换。
    • 在这里通过 setDateFormat 方法设置了全局的日期格式,所有涉及日期的字段都会被转换为 yyyy-MM-dd HH:mm:ss 格式。
  6. converters.add(0, converter)

    • 该语句将自定义的消息转换器添加到 converters 列表的最前面。这样可以保证 Spring 优先使用我们自定义的转换器来处理请求和响应中的 JSON 数据。

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

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

相关文章

嵌入式※~MCU~LWIP~TLS/HTTPS等

单片机MCU中的加密通道, 使用各种的加密通道, http / tcp / mqtt 等 可能不在重复发了 ~~ 请看链接吧~~~ 我自己的原文哦~ https://blog.51cto.com/whaosoft/11803802

【Spring篇】Spring的Aop详解

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】【Mybatis篇】【Spring篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;初始Sprig AOP及…

【C++】哈希表的模拟实现

目录 一、闭散列&#xff08;开放定址定法&#xff09; 1、哈希表的结构&#xff1a; 2、哈希表的插入&#xff1a; 3、哈希表的查找&#xff1a; 4、哈希表的删除&#xff1a; 二、开散列&#xff08;哈希桶&#xff09; 1、哈希表的结构&#xff1a; 2、构造与析构&a…

常用shell指令

这些指令通常在adb shell环境中使用&#xff0c;或者通过其他方式&#xff08;如SSH&#xff09;直接在设备的shell中使用。 文件操作命令 ls&#xff1a;列出目录的内容 ls /sdcard cd&#xff1a;改变目录 cd /sdcard/Download pwd&#xff1a;打印当前工作目录 pwd cat&…

【MySQL】提高篇—索引与性能优化:如何创建与管理索引

为了提高查询效率&#xff0c;数据库提供了索引的功能。索引可以看作是数据库表的“目录”&#xff0c;它允许数据库管理系统快速定位到所需的数据行&#xff0c;而无需扫描整个表。 通过合理地创建和管理索引&#xff0c;可以显著提升数据检索的速度和效率。 在实际应用中&a…

炒股中如何克服贪婪与恐惧?

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…

自动化抖音点赞取消脚本批量处理

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

算法复习核心题目策略总结,以便回顾

以下是自己8年技术面试以来总结的算法考点&#xff01; 1. 基础(要消化的) 基础查找 二叉树 链表 排序&#xff0c;见【基础数据结构思路&写法记录&#xff0c;便于回顾-CSDN博客】 2. 典型常考类型及题目(需要面试前回顾下) 题目列举 二分 链表与数组 二叉树与分治 二叉树…

centos7 nginx优化

优化nginx进程个数的策略 在高并发、高访问量的web服务场景&#xff0c;需要事先启动好更多的nginx进程&#xff0c;以保证快速响应并处理大量并发用户的请求。worker_processes 1;一般调整到与CPU的颗数相同查看LInux可查看CPU个数及总核数grep processor /proc/cpuinfo|wc …

手机摄影入门

感觉会摄影的人是能够从生活中发现美的人。 我不太会拍照&#xff0c;觉得拍好的照片比较浪费时间&#xff0c;而且缺乏审美也缺乏技巧&#xff0c;所以拍照的时候总是拍不好。但有时候还是需要拍一些好看的照片的。 心态和审美可能需要比较长时间提升&#xff0c;但一些基础…

在不支持AVX的linux上使用PaddleOCR

背景 公司的虚拟机CPU居然不支持avx, 默认的paddlepaddle的cpu版本又需要有支持avx才行,还想用PaddleOCR有啥办法呢? 是否支持avx lscpu | grep avx 支持avx的话,会显示相关信息 如果不支持的话,python运行时导入paddle会报错 怎么办呢 方案一 找公司it,看看虚拟机为什么…

重学SpringBoot3-Spring WebFlux之HttpHandler和HttpServer

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-Spring WebFlux之HttpHandler和HttpServer 1. 什么是响应式编程&#xff1f;2. Project Reactor 概述3. HttpHandler概述3.1 HttpHandler是什么3.2 Http…

Rust编写硬件抽象层(HAL)服务

基于Rust编写硬件抽象层&#xff08;HAL&#xff09;服务是一个复杂但有趣的任务&#xff0c;它涉及到嵌入式系统开发的多个方面。以下是一个详细的指南&#xff0c;帮助你理解如何使用Rust编写HAL服务。 一、引言 硬件抽象层&#xff08;HAL&#xff09;是嵌入式系统开发中的…

SQL 中查找重复数据的四种方法

数据库中的重复数据可能导致存储成本增加、查询性能下降、分析结果不准确以及数据管理混乱。本文概述了四种 SQL 技术来检测和处理这些重复数据&#xff1a;使用GROUP BY和HAVING识别重复行的分组&#xff0c;采用诸如ROW_NUMBER()的窗口函数进行高效分析&#xff0c;利用EXIST…

常见的Java面试题

1.在项目中遇到难点是如何处理 数据库性能问题&#xff1a;在数据库处理数据操作&#xff08;如查询、插入、更新、删除等&#xff09;时表现出的响应速度慢、资源利用率高、吞吐量低等不良情况&#xff0c;影响了系统的整体性能和用户体验 解决方案有以下这些&#xff1a; 优化…

有什么牌子的学生台灯性价比高?五款性价比高的学生用台灯

最近不少朋友都在问我&#xff0c;有什么牌子的学生台灯性价比高&#xff1f;说实话&#xff0c;这还真不是个容易回答的问题。市面上的台灯品种琳琅满目&#xff0c;价格从几十到上千都有&#xff0c;功能也是五花八门。选择一款适合自己的护眼台灯&#xff0c;确实需要好好琢…

深度学习中的迁移学习:优化训练流程与提高模型性能的策略,预训练模型、微调 (Fine-tuning)、特征提取

1024程序员节 | 征文 深度学习中的迁移学习&#xff1a;优化训练流程与提高模型性能的策略 目录 &#x1f3d7;️ 预训练模型&#xff1a;减少训练时间并提高准确性&#x1f504; 微调 (Fine-tuning)&#xff1a;适应新任务的有效方法&#x1f9e9; 特征提取&#xff1a;快速…

Flink 1.18安装 及配置 postgres12 同步到mysql5.7(Flink sql 方式)

文章目录 1、参考2、flink 常见部署模式组合3、Standalone 安装3.1 单节点安装3.2 问题13.3 修改ui 端口3.4 使用ip访问 4 flink sql postgres --->mysql4.1 配置postgres 124.2 新建用户并赋权4.3. 发布表4.4 Flink sql4.5 Could not find any factory for identifier post…

深度学习到底是怎么实现训练模型的(以医学图像分割为例

本文主要讲解的主要不是深度学习训练模型过程中的数学步骤&#xff0c;不是讲&#xff1a; 输入——前向传播——反向传播——输出&#xff0c;特征提取&#xff0c;特征融合等等过程。而是对于小白或者门外汉来说&#xff0c;知道模型怎么处理的&#xff0c;在用些什么东西&am…

分享二维码弹窗,实现扫码跳转

1.二维码组件 QRCode CustomDialog export struct ShareDialog {Prop item: QuestionDetail as QuestionDetailcontroller: CustomDialogControllerQRCode(this.item.id).width(160).height(160) } 2.扫码跳转 前置知识&#xff1a; Scan Kit 提供默认界面扫码能力。canIUs…