最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在SpringBoot里自定義Spring MVC配置的三種方法

 更新時間:2026年03月21日 14:16:47   作者:希望永不加班  
SpringBoot幫我們自動配好了 MVC 的核心組件,但實際開發(fā)中,光用默認(rèn)配置肯定不夠今天就教你 3 種自定義 Spring MVC 配置的方法,從簡單到復(fù)雜,新手也能一步步跟著做,需要的朋友可以參考下

前言

SpringBoot 幫我們自動配好了 MVC 的核心組件,但實際開發(fā)中,光用默認(rèn)配置肯定不夠:

比如想改靜態(tài)資源路徑、加自定義攔截器、換消息轉(zhuǎn)換器、調(diào)整請求參數(shù)解析規(guī)則……這些都需要我們自定義 Spring MVC 配置。

今天就教你 3 種自定義 Spring MVC 配置的方法,從簡單到復(fù)雜,新手也能一步步跟著做,再也不用對著默認(rèn)配置束手無策。

先搞懂SpringBoot 里自定義 MVC 配置的“規(guī)矩”

SpringBoot 為了不讓我們亂改配置,定了一個核心規(guī)則:
想要自定義 MVC 配置,必須實現(xiàn) WebMvcConfigurer 接口(或繼承 WebMvcConfigurerAdapter,但 3.x 已廢棄),并加上 @Configuration 注解

這個接口里全是默認(rèn)方法(不用全部實現(xiàn),按需重寫),覆蓋了 MVC 配置的所有場景:靜態(tài)資源、攔截器、消息轉(zhuǎn)換器、視圖解析器……

先給個基礎(chǔ)模板,所有自定義配置都基于這個結(jié)構(gòu):

importorg.springframework.context.annotation.Configuration;
importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;
// 標(biāo)記這是配置類,SpringBoot 啟動時會掃描并加載
@Configuration
publicclassCustomWebMvcConfigimplementsWebMvcConfigurer{
// 下面重寫需要自定義的方法即可
// 自定義靜態(tài)資源路徑、添加攔截器、配置消息轉(zhuǎn)換器……
}

踩坑提醒:千萬別加 @EnableWebMvc 注解!
加了這個注解,SpringBoot 會完全關(guān)閉默認(rèn)的 MVC 自動配置,所有配置都要你自己寫(包括 DispatcherServlet、參數(shù)解析器這些核心組件),新手大概率會配崩。

最簡單的自定義——修改靜態(tài)資源訪問路徑

SpringBoot 默認(rèn)的靜態(tài)資源路徑是 classpath:/static/、classpath:/public/、classpath:/resources/,比如你在 static 下放個 test.jpg,訪問地址是 http://localhost:8080/test.jpg

如果想加自定義路徑(比如 classpath:/images/),或者改默認(rèn)優(yōu)先級,重寫 addResourceHandlers 方法就行:

importorg.springframework.context.annotation.Configuration;
importorg.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
publicclassCustomWebMvcConfigimplementsWebMvcConfigurer{
// 自定義靜態(tài)資源配置
@Override
publicvoidaddResourceHandlers(ResourceHandlerRegistry registry){
// 1. 添加自定義靜態(tài)資源路徑:classpath:/images/
// addResourceHandler:前端訪問路徑前綴
// addResourceLocations:本地資源實際路徑
        registry.addResourceHandler("/images/**")// 前端訪問 http://localhost:8080/images/xxx.jpg
addResourceLocations("classpath:/images/");// 對應(yīng)項目里的 src/main/resources/images/
// 2. 覆蓋默認(rèn)靜態(tài)資源路徑(可選,不推薦,保留默認(rèn)更靈活)
// registry.addResourceHandler("/**")
//         .addResourceLocations("classpath:/my-static/");
}
}

測試:在 src/main/resources/images/ 下放 logo.png,訪問 http://localhost:8080/images/logo.png 就能看到圖片。

最常用的自定義——添加全局?jǐn)r截器

開發(fā)中經(jīng)常需要用攔截器做登錄校驗、接口限流、日志記錄,這是自定義 MVC 最核心的場景。

步驟分兩步:先寫攔截器類,再在 MVC 配置里注冊。

第一步:寫自定義攔截器

importjakarta.servlet.http.HttpServletRequest;
importjakarta.servlet.http.HttpServletResponse;
importorg.springframework.web.servlet.HandlerInterceptor;
importorg.springframework.web.servlet.ModelAndView;
// 自定義登錄攔截器
publicclassLoginInterceptorimplementsHandlerInterceptor{
// 請求處理前執(zhí)行(核心邏輯寫這里)
@Override
publicbooleanpreHandle(HttpServletRequest request,HttpServletResponse response,Object handler)throwsException{
// 模擬:從請求頭獲取 token,判斷是否登錄
String token = request.getHeader("token");
if(token ==null||!"admin123".equals(token)){
// 未登錄,返回 401 狀態(tài)碼
            response.setStatus(401);
            response.getWriter().write("未登錄,請先登錄!");
returnfalse;// 攔截請求,不往下走
}
returntrue;// 放行請求
}
// 請求處理后執(zhí)行(可選)
@Override
publicvoidpostHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView modelAndView)throwsException{
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
// 整個請求完成后執(zhí)行(可選,比如清理資源)
@Override
publicvoidafterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex)throwsException{
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}

第二步:在 MVC 配置里注冊攔截器

importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.web.servlet.config.annotation.InterceptorRegistry;
importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
publicclassCustomWebMvcConfigimplementsWebMvcConfigurer{
// 把攔截器注冊為 Bean,Spring 才能管理
@Bean
publicLoginInterceptorloginInterceptor(){
returnnewLoginInterceptor();
}
// 注冊攔截器,并配置攔截規(guī)則
@Override
publicvoidaddInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(loginInterceptor())
.addPathPatterns("/**")// 攔截所有請求
.excludePathPatterns("/login","/hello");// 排除登錄、hello 接口(不攔截)
}
}

測試:

  • 訪問 http://localhost:8080/hello:不用 token,正常返回(排除攔截);
  • 訪問 http://localhost:8080/user/info:不加 token 會返回 401,加 token: admin123 請求頭才放行。

進(jìn)階自定義——替換/新增消息轉(zhuǎn)換器

Spring MVC 默認(rèn)用 MappingJackson2HttpMessageConverter 處理 JSON 序列化/反序列化,但有時我們想自定義規(guī)則(比如日期格式、空值處理),或者換用 FastJSON 作為轉(zhuǎn)換器。

以“自定義 Jackson 日期格式”為例:

importcom.fasterxml.jackson.databind.ObjectMapper;
importcom.fasterxml.jackson.databind.SerializationFeature;
importcom.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
importcom.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.http.converter.HttpMessageConverter;
importorg.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;
importjava.time.LocalDateTime;
importjava.time.format.DateTimeFormatter;
importjava.util.List;
@Configuration
publicclassCustomWebMvcConfigimplementsWebMvcConfigurer{
// 自定義 JSON 消息轉(zhuǎn)換器
@Override
publicvoidconfigureMessageConverters(List<HttpMessageConverter<?>> converters){
// 1. 創(chuàng)建 Jackson 對象映射器,自定義序列化規(guī)則
ObjectMapper objectMapper =newObjectMapper();
// 處理 LocalDateTime 日期格式
JavaTimeModule javaTimeModule =newJavaTimeModule();
        javaTimeModule.addSerializer(LocalDateTime.class,
newLocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        objectMapper.registerModule(javaTimeModule);
// 關(guān)閉默認(rèn)的日期序列化(避免轉(zhuǎn)成時間戳)
        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
// 2. 創(chuàng)建自定義的消息轉(zhuǎn)換器
MappingJackson2HttpMessageConverter converter =newMappingJackson2HttpMessageConverter();
        converter.setObjectMapper(objectMapper);
// 3. 把自定義轉(zhuǎn)換器加到列表最前面(優(yōu)先級最高)
        converters.add(0, converter);
}
}

測試:返回包含 LocalDateTime 類型的對象時,日期會按 yyyy-MM-dd HH:mm:ss 格式顯示,而不是默認(rèn)的時間戳或 ISO 格式。

新手常見問題(避坑清單)

自定義配置不生效?

  • 檢查 @Configuration 注解有沒有加;
  • 檢查配置類是否在主啟動類的掃描包下;
  • 別加 @EnableWebMvc(除非你想完全自定義)。

攔截器里注入 Service 為 null?

  • 原因:攔截器不是 Spring 管理的 Bean,直接 new 會導(dǎo)致依賴注入失??;
  • 解決:像上面那樣,用 @Bean 注解把攔截器注冊為 Spring Bean,再通過方法引用獲取。

靜態(tài)資源訪問 404?

最后總結(jié)

SpringBoot 里自定義 Spring MVC 配置,核心就 3 點:

  • 檢查 addResourceHandlers 里的路徑是否寫對(classpath:/ 別漏,/** 通配符別少);
  • 別覆蓋默認(rèn)靜態(tài)資源路徑,優(yōu)先用添加(add)而非替換。
  • 實現(xiàn) WebMvcConfigurer 接口 + 加 @Configuration;
  • 按需重寫接口里的方法(靜態(tài)資源、攔截器、消息轉(zhuǎn)換器等);
  • 別加 @EnableWebMvc,保留 SpringBoot 自動配置的基礎(chǔ)。

以上就是在SpringBoot里自定義Spring MVC配置的三種方法的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot自定義Spring MVC配置的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • springboot創(chuàng)建攔截器過程圖解

    springboot創(chuàng)建攔截器過程圖解

    這篇文章主要介紹了springboot創(chuàng)建攔截器過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Java生產(chǎn)者消費者的三種實現(xiàn)方式

    Java生產(chǎn)者消費者的三種實現(xiàn)方式

    這篇文章主要介紹了Java生產(chǎn)者消費者的三種實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java常用工具類庫——Hutool的使用簡介

    Java常用工具類庫——Hutool的使用簡介

    這篇文章主要介紹了Java常用工具類庫——Hutool的使用簡介,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-04-04
  • Java根據(jù)IP地址實現(xiàn)歸屬地獲取

    Java根據(jù)IP地址實現(xiàn)歸屬地獲取

    Ip2region是一個離線IP地址定位庫和IP定位數(shù)據(jù)管理框架,這篇文章主要為大家詳細(xì)介紹了Java如何使用Ip2region實現(xiàn)根據(jù)IP地址獲取歸屬地,感興趣的小伙伴可以了解下
    2025-05-05
  • Java實現(xiàn)的二叉樹常用操作【前序建樹,前中后遞歸非遞歸遍歷及層序遍歷】

    Java實現(xiàn)的二叉樹常用操作【前序建樹,前中后遞歸非遞歸遍歷及層序遍歷】

    這篇文章主要介紹了Java實現(xiàn)的二叉樹常用操作,包括二叉樹的前序建樹,前中后遞歸非遞歸遍歷及層序遍歷等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • java多線程文件下載器的實現(xiàn)

    java多線程文件下載器的實現(xiàn)

    本文主要介紹了java多線程文件下載器的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Spring的基礎(chǔ)事務(wù)注解@Transactional作用解讀

    Spring的基礎(chǔ)事務(wù)注解@Transactional作用解讀

    文章介紹了Spring框架中的事務(wù)管理,核心注解@Transactional用于聲明事務(wù),支持傳播機(jī)制、隔離級別等配置,結(jié)合@TransactionalEventListener實現(xiàn)事務(wù)事件監(jiān)聽,可在事務(wù)提交后執(zhí)行后續(xù)操作,如郵件通知和日志記錄,通過合理選擇事務(wù)相位和異步處理,提升系統(tǒng)可靠性與解耦性
    2025-09-09
  • RabbitMq報錯reply-code=406 reply-text=PRECONDITION_FAILED解決

    RabbitMq報錯reply-code=406 reply-text=PRECONDITION_FAILED

    這篇文章主要為大家介紹了RabbitMq報錯reply-code=406 reply-text=PRECONDITION_FAILED分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • java 注解實現(xiàn)一個可配置線程池的方法示例

    java 注解實現(xiàn)一個可配置線程池的方法示例

    這篇文章主要介紹了java 注解實現(xiàn)一個可配置線程池的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Java實現(xiàn)為PDF批量添加圖片水印實用指南

    Java實現(xiàn)為PDF批量添加圖片水印實用指南

    在數(shù)字化辦公日益普及的今天,PDF文檔作為信息傳輸和共享的重要載體,其安全性和版權(quán)保護(hù)變得尤為關(guān)鍵,本文將介紹如何使用Spire.PDF?for?Java輕松地在Java應(yīng)用程序中為PDF文檔添加圖片水印,有需要的可以參考下
    2025-11-11

最新評論

拉萨市| 沁源县| 鱼台县| 乐平市| 休宁县| 满城县| 大姚县| 边坝县| 南华县| 内江市| 梁平县| 曲阜市| 常山县| 香格里拉县| 广汉市| 获嘉县| 平乐县| 舒城县| 高平市| 南京市| 三河市| 绥中县| 八宿县| 泸溪县| 宁波市| 石林| 息烽县| 广东省| 杭州市| 灵武市| 区。| 尉氏县| 本溪| 武冈市| 绵竹市| 宁晋县| 巩义市| 贡嘎县| 衡水市| 深圳市| 太仆寺旗|