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,一经查实,立即删除!

相关文章

【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&…

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

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

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…

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

最近不少朋友都在问我&#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.ColorSpace 地址&#xff1a;ColorSpace - Color Palettes Generator and Color Gradient Tool Color Space 是款功能强大的渐变色在线生成器&#xff0c;支持单色、双色&#xff0c;甚至三色渐变。 进入首页&#xff0c;输入一个颜色&#xff0c;点击 GENERATE&#xff08…

从一个简单的计算问题,看国内几个大语言模型推理逻辑能力

引言 首先&#xff0c;来看问题&#xff1a; 123456*987654等于多少&#xff0c;给出你计算的过程。 从openai推出chatgpt以来&#xff0c;大模型发展的很快&#xff0c;笔者也经常使用免费的大语言模型辅助进行文档编写和编码工作。大模型推出时间也好久了&#xff0c;笔者想…

autMan框架的定时推送功能学习

一、定时推送功能简介 “定时推送”位于“系统管理”目录 主要有两个使用方向&#xff1a; 一是定时向某人或某群发送信息。 二是定时运行某指令&#xff0c;就是机器人给自己发指令&#xff0c;让自己运行此指令。 二、定时推送设置 定时&#xff1a;cron表达式&#xff0c;…

Java 21新特性概述

Java 21于2023年9月19日发布&#xff0c;这是一个LTS&#xff08;长期支持&#xff09;版本&#xff0c;到此为止&#xff0c;目前有Java 8、Java 11、Java 17和Java 21这四个LTS版本。 Java 21此次推出了15个新特性&#xff0c;本节就介绍其中重要的几个特性&#xff1a; JEP…

Ubuntu20.04安装ROS2教程

Ubuntu20.04安装ROS2教程 ROS 2 安装指南支持的ROS 2 版本设置语言环境&#xff08;Set locale&#xff09;设置源&#xff08;Setup Sources&#xff09;设置密钥安装 ROS 2 包&#xff08;Install ROS 2 packages&#xff09;环境设置&#xff08;Environment setup&#xff…

java--反射(reflection)

一、反射机制 Java Reflection &#xff08;1&#xff09;反射机制允许程序在执行期借助 Reflection API 取得任何类的内部信息&#xff08;比如成员变量、构造器、成员方法等等&#xff09;&#xff0c;并能操作对象的属性及方法。反射在设计模式和框架底层都会用到。&#x…

时间序列预测(九)——门控循环单元网络(GRU)

目录 一、GRU结构 二、GRU核心思想 1、更新门&#xff08;Update Gate&#xff09;&#xff1a;决定了当前时刻隐藏状态中旧状态和新候选状态的混合比例。 2、重置门&#xff08;Reset Gate&#xff09;&#xff1a;用于控制前一时刻隐藏状态对当前候选隐藏状态的影响程度。…

Java项目-基于springboot框架的智慧外贸系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…