精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

更強大!Spring Boot 3.4 配置校驗新特性全解鎖

開發(fā) 前端
在 Spring Boot 3.4 中,配置屬性的驗證機制得到了顯著增強,讓開發(fā)者可以更優(yōu)雅地保證配置正確性。本文將結(jié)合完整示例,詳細講解其新特性及如何自定義錯誤提示,讓啟動校驗體驗更加絲滑!

在 Spring Boot 3.4 中,配置屬性的驗證機制得到了顯著增強,讓開發(fā)者可以更優(yōu)雅地保證配置正確性。本文將結(jié)合完整示例,詳細講解其新特性及如何自定義錯誤提示,讓啟動校驗體驗更加絲滑!

配置屬性驗證增強亮點

Spring Boot 3.4 對配置校驗支持進行了全面升級,核心亮點包括:

  • 支持 jakarta.validation 全套標準注解(如 @NotNull@Email@Pattern 等)
  • 嵌套對象、集合元素 的深度校驗支持
  • 啟動階段校驗失敗,IDE友好提示,快速定位問題
  • 自動生成更完善的開發(fā)時元信息(metadata)

可以說,從易用性到嚴謹性,都有了質(zhì)的飛躍!

基本用法示例

定義配置類

以用戶配置為例:

package com.icoderoad.demo.config;


import jakarta.validation.Valid;
import jakarta.validation.constraints.*;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;


import java.util.List;


@Validated
@ConfigurationProperties(prefix = "app.user")
public class UserProperties {


    @NotBlank(message = "用戶名不能為空")
    private String username;


    @Email(message = "郵箱格式不正確")
    private String email;


    @Min(value = 18, message = "年齡不能小于18歲")
    private Integer age;


    @Valid
    private Address address;


    @Size(min = 1, message = "至少需要一個角色")
    private List<@NotBlank(message = "角色名稱不能為空") String> roles;


    // Address是嵌套對象,需要加@Valid
    public static class Address {
        @NotBlank(message = "城市不能為空")
        private String city;


        @Pattern(regexp = "\\d{6}", message = "郵編必須是6位數(shù)字")
        private String zipCode;


        // getter/setter
        public String getCity() {
            return city;
        }
        public void setCity(String city) {
            this.city = city;
        }
        public String getZipCode() {
            return zipCode;
        }
        public void setZipCode(String zipCode) {
            this.zipCode = zipCode;
        }
    }


    // getter/setter
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
    public List<String> getRoles() {
        return roles;
    }
    public void setRoles(List<String> roles) {
        this.roles = roles;
    }
}

配置 application.yml

app:
  user:
    username: "張三"
    email: "zhangsan@example.com"
    age: 25
    address:
      city: "上海"
      zipCode: "200000"
    roles:
      - "admin"
      - "user"

注入使用

在你的服務(wù)中注入:

package com.icoderoad.demo.service;


import com.example.demo.config.UserProperties;
import org.springframework.stereotype.Service;


@Service
public class UserService {


    private final UserProperties userProperties;


    public UserService(UserProperties userProperties) {
        this.userProperties = userProperties;
    }


    public void printUserInfo() {
        System.out.println("用戶名:" + userProperties.getUsername());
        System.out.println("郵箱:" + userProperties.getEmail());
    }
}

嵌套對象與集合元素深度校驗

注意,在嵌套對象上必須標注 @Valid,才能對子屬性繼續(xù)校驗。集合元素(如 List<String>)同樣支持元素級校驗注解

這讓配置類的約束更加細粒度、安全。

啟動階段即校驗失敗

如果配置不符合要求,比如漏填 username、郵箱格式錯誤、年齡不足18歲、角色列表為空等,Spring Boot 啟動時就會直接報錯

示例錯誤日志:

***************************
APPLICATION FAILED TO START
***************************

Description:

Binding to target [Bindable@xxx type = com.icoderoad.demo.config.UserProperties] failed:

    Property: app.user.username
    Value: 
    Reason: 用戶名不能為空

    Property: app.user.email
    Value: not-an-email
    Reason: 郵箱格式不正確

非常直觀,能第一時間發(fā)現(xiàn)配置問題,避免服務(wù)上線后隱患!

開發(fā)時元信息增強

配合 Spring Boot 的 spring-boot-configuration-processor 插件,還能自動生成提示補全信息(IDE 中 .yml 配置智能提示)!

pom.xml 配置:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

編譯后,會生成 META-INF/spring-configuration-metadata.json,供 IDE 智能補全參考。

注意事項

  • @ConfigurationProperties 
    必須配合 @Validated
  • 嵌套對象字段要加 @Valid
  • 集合元素校驗,需要在泛型上加注解
  • 使用 Jakarta Validation 標準注解(Spring Boot 3.x 默認使用 Jakarta)

擴展:錯誤處理更友好(自定義異常消息格式)

默認啟動校驗失敗時,Spring Boot 拋出 BindValidationException,信息雖然完整但略顯雜亂。為了讓錯誤提示更專業(yè)友好,我們可以自定義異常處理。

定義友好的異常類

package com.icoderoad.demo.exception;


/**
 * 自定義配置校驗異常
 */
public class ConfigValidationException extends RuntimeException {


    public ConfigValidationException(String message) {
        super(message);
    }
}

編寫異常處理器

通過 BeanFactoryPostProcessor 統(tǒng)一攔截配置階段的校驗錯誤:

package com.icoderoad.demo.exception;


import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.boot.context.properties.bind.BindValidationException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.ObjectError;


import java.util.stream.Collectors;


@Configuration
public class ConfigValidationExceptionHandler {


    @Bean
    public static BeanFactoryPostProcessor configurationPropertiesValidator() {
        return beanFactory -> {
            try {
                // 手動觸發(fā)bean初始化
            } catch (BeansException ex) {
                Throwable cause = ex.getCause();
                if (cause instanceof BindValidationException bindValidationException) {
                    String errorMessages = bindValidationException.getValidationErrors()
                            .getAllErrors()
                            .stream()
                            .map(ObjectError::getDefaultMessage)
                            .collect(Collectors.joining("; "));
                    throw new ConfigValidationException("配置屬性校驗失敗:" + errorMessages);
                }
                throw ex;
            }
        };
    }
}

邏輯解釋:

  • 捕獲 BindValidationException
  • 提取所有校驗失敗信息
  • 使用 拼接成簡潔可讀的文本
  • 拋出我們的 ConfigValidationException

示例效果

比如你的配置錯誤如下:

app:
  user:
    username: ""
    email: "wrong"
    age: 15
    address:
      city: ""
      zipCode: "12abc"
    roles:
      - ""

啟動時拋出的錯誤變成:

配置屬性校驗失敗:用戶名不能為空; 郵箱格式不正確; 年齡不能小于18歲; 城市不能為空; 郵編必須是6位數(shù)字; 角色名稱不能為空
  • 信息集中、簡潔直觀
  • 一次性列出所有問題,快速修復(fù)
  • 適合前后端、測試同事快速理解

總結(jié)

Spring Boot 3.4 配置屬性驗證:

  • 驗證能力更強大覆蓋深度校驗、集合元素校驗
  • 開發(fā)體驗更極致啟動即校驗,IDE智能提示
  • 錯誤處理更優(yōu)雅可自定義異常格式
  • 提升整體代碼質(zhì)量避免配置隱患上線

在實際項目中,推薦配合自定義異常機制,打造更加專業(yè)可靠的配置校驗體系!

責(zé)任編輯:武曉燕 來源: 路條編程
相關(guān)推薦

2018-05-30 15:10:24

Spring BootList類型

2025-04-28 04:55:00

2025-04-28 03:00:00

2025-04-16 10:03:40

開發(fā)Spring應(yīng)用程序

2025-04-27 04:00:00

錯誤頁Spring底層

2009-06-04 17:24:29

EJB3.1新特性Time服務(wù)

2009-04-08 08:41:42

Iphone移動OS

2025-03-27 08:10:19

Spring開發(fā)架構(gòu)

2018-06-06 14:30:38

Spring BootApplication事件

2022-11-08 07:46:28

record類聲明代碼

2025-02-17 04:00:00

SpringDgraph系統(tǒng)

2025-04-27 01:55:44

SpringConfigData配置

2022-10-26 07:14:25

Spring 6Spring業(yè)務(wù)

2021-11-29 21:42:44

微軟Windows 11Windows

2024-05-31 14:06:55

SpringCDSGraalVM

2009-06-24 09:22:04

Spring2.5新特

2024-12-03 10:46:48

Spring優(yōu)化開發(fā)

2012-01-12 16:16:20

Fedora 17特性規(guī)劃

2025-02-25 08:00:00

SpringBootLua開發(fā)

2021-08-10 15:11:27

Spring Boot參數(shù)校驗
點贊
收藏

51CTO技術(shù)棧公眾號

波多野结衣电影免费观看| 国产在线资源一区| 精品少妇一区二区三区密爱| 久久精品xxxxx| 一区二区三区不卡在线观看| 国产伦精品一区二区三区免 | 亚洲免费在线电影| 国产伦精品一区二区三区高清版 | 国语对白在线刺激| 92精品国产成人观看免费| 国产精品69av| 国产一级做a爱免费视频| 免费欧美激情| 日韩欧美视频在线| 91香蕉视频导航| 国产黄色大片在线观看| 国产精品美女一区二区三区| 国产精品久久久久久久久久久久午夜片| aaa在线视频| 在线精品一区| 久久影院在线观看| 99精品全国免费观看| 久久久精品国产**网站| 欧美日本一区二区在线观看| 亚洲 自拍 另类小说综合图区| 性开放的欧美大片| 成人黄色777网| 亚洲aⅴ男人的天堂在线观看| 蜜臀精品一区二区三区| 亚洲区一区二| 欧美高清电影在线看| 国产又粗又长免费视频| 精品中文一区| 亚洲精品在线不卡| 中文字幕 日本| 在线视频亚洲欧美中文| 在线不卡一区二区| 美女喷白浆视频| 成人一级福利| 亚洲第一av色| 欧美视频在线观看视频| 日本在线视频中文有码| 亚洲男人天堂av网| 日本成人性视频| 丝袜美腿美女被狂躁在线观看 | 久久婷婷国产综合尤物精品| 午夜免费福利视频| 国产乱子轮精品视频| 91精品国产综合久久香蕉最新版 | 韩国一区二区三区美女美女秀 | av资源免费观看| 亚洲啪啪91| 91精品国产亚洲| 青青草成人av| 国产亚洲高清视频| 8x海外华人永久免费日韩内陆视频| 九九热国产在线| 欧美午夜在线| 91chinesevideo永久地址| 日本一区二区免费在线观看| 亚洲深夜av| 日本91av在线播放| 国产无遮挡又黄又爽又色视频| 久久精品麻豆| 国产欧美日韩中文字幕在线| 一区二区的视频| 国产一区欧美二区| 成人区精品一区二区| 人妻无码中文字幕免费视频蜜桃| 99re这里都是精品| 日本一区视频在线观看| 午夜视频在线看| 亚洲六月丁香色婷婷综合久久| 在线观看av的网址| 岛国av免费在线观看| 日韩欧美aaa| 国模私拍视频在线观看| 免费欧美网站| 亚洲精品乱码久久久久久按摩观| 国产熟妇久久777777| 成人精品影院| 久久99国产精品久久久久久久久| 日韩精品在线免费看| 久久九九国产| 96sao精品视频在线观看| 婷婷伊人综合中文字幕| 国产欧美日韩在线观看| 国产资源第一页| 电影一区二区三| 欧美老肥妇做.爰bbww| 催眠调教后宫乱淫校园 | 91免费网站视频| a'aaa级片在线观看| 欧美视频日韩视频在线观看| 日日夜夜精品视频免费观看| 天堂成人娱乐在线视频免费播放网站| 亚洲视频视频在线| 精品爆乳一区二区三区无码av| 久久深夜福利| www日韩av| 成年人在线观看| 亚洲在线成人精品| 日本三级黄色网址| 欧美三级午夜理伦三级小说| 久久精品中文字幕电影| 91午夜视频在线观看| 久久av老司机精品网站导航| 精品一区二区日本| 国产最新在线| 色婷婷亚洲精品| 日本一级大毛片a一| 四虎8848精品成人免费网站 | 嫩草伊人久久精品少妇av杨幂| 日韩欧美亚洲国产另类| 美女网站视频色| 亚洲免费一区二区| 国产91视觉| 婷婷在线视频| 色狠狠av一区二区三区| 日本国产在线视频| 中文字幕亚洲综合久久五月天色无吗'' | 精品国产91亚洲一区二区三区www| 91在线品视觉盛宴免费| 欧美视频一区二区三区…| 老司机av网站| 亚洲国产一区二区三区在线播放 | 精品欧美视频| 在线视频欧美日韩精品| 99久在线精品99re8热| 韩国精品一区二区| 视频一区二区在线观看| 黑人精品一区| 精品亚洲一区二区三区四区五区| 免费一级片在线观看| 久久超级碰视频| 亚洲v国产v在线观看| 东京一区二区| 国产丝袜高跟一区| 亚洲熟女综合色一区二区三区| 成人丝袜高跟foot| 国产av熟女一区二区三区| 精品午夜视频| 欧美成人午夜免费视在线看片 | 精品在线播放免费| 一区二区在线观| 亚洲我射av| 麻豆一区二区在线观看| 国产婷婷在线视频| 亚洲精品欧美在线| 欧美国产日韩另类| 亚洲欧美日韩高清在线| 91视频99| 欧美aaa免费| 亚洲第一福利网站| 国产精品黄色网| 久久一夜天堂av一区二区三区| 欧美 日韩 国产一区| 一区二区美女| 国产啪精品视频网站| 永久免费在线观看视频| 欧美一区二区三区性视频| 久久久全国免费视频| 成人激情视频网站| av免费播放网址| 国产精品欧美三级在线观看| 国产精品成人品| 最新电影电视剧在线观看免费观看| 欧美蜜桃一区二区三区| 印度午夜性春猛xxx交| 成人综合激情网| wwwxxx黄色片| 91视频综合| 国产精品日韩一区二区免费视频| 亚洲优女在线| 最近2019好看的中文字幕免费| 国产精品自偷自拍| 天天操天天干天天综合网| 久久久久久久久久久久久久久| 麻豆精品一区二区综合av| 久久www视频| 亚洲+变态+欧美+另类+精品| 国产精品高清免费在线观看| 国产黄大片在线观看画质优化| 精品日韩99亚洲| 午夜婷婷在线观看| 亚洲色图欧洲色图| 精品夜夜澡人妻无码av| 寂寞少妇一区二区三区| 国产人妻777人伦精品hd| 日韩一区二区中文| 精品一区久久久久久| 日本亚洲欧洲无免费码在线| 欧美国产第一页| www.亚洲视频| 精品国产3级a| 91在线视频国产| 精品女厕一区二区三区| 男女全黄做爰文章| 91麻豆免费在线观看| 中文字幕1234区| 久久久一二三| 欧美一区二区视频在线播放| 欧美综合在线视频观看| 国产亚洲二区| 国产精品视频一区二区三区综合| 57pao成人国产永久免费| 国产欧美久久久久久久久| 日韩电视剧免费观看网站| 国产精品乱码久久久| 色综合久久久久综合99| 青娱乐国产精品| 国产精品全国免费观看高清 | 性生活视频软件| 欧美亚洲一区二区三区四区| 国产一级做a爱片久久毛片a| 亚洲欧美另类久久久精品| 在线观看日本中文字幕| 91视频在线观看免费| 黄页网站在线看| 韩国女主播成人在线| 欧美三级理论片| 久久一区激情| 国产午夜伦鲁鲁| 一区二区自拍| 免费在线看黄色片| 亚洲第一偷拍| 国产大尺度在线观看| 不卡视频在线| 午夜午夜精品一区二区三区文| 一区二区导航| 欧美日韩无遮挡| 希岛爱理av免费一区二区| 国产一区二区视频在线免费观看| 久久在线观看| 亚洲综合中文字幕在线| 国产成年精品| 91欧美日韩一区| 国产电影一区二区| 91丨九色丨国产| 精品三级国产| 国产超碰91| 亚洲精品18| 国产不卡一区二区三区在线观看| 最新精品在线| 久久er99热精品一区二区三区| 国产精品极品在线观看| 国模一区二区三区私拍视频| 国产精品传媒| 看欧美日韩国产| 久久不见久久见国语| 日韩国产欧美一区| 日本欧美国产| 黄瓜视频免费观看在线观看www| 日韩精品2区| 香蕉视频在线网址| 亚洲天堂男人| 国产精品va无码一区二区| 久久中文在线| 三级av免费观看| 国内精品视频666| 免费观看一区二区三区| www.av精品| 日韩人妻无码精品综合区| 欧美激情一区二区三区四区| 午夜精品久久久久99蜜桃最新版| 成人免费小视频| 国产一级片免费看| 色综合天天天天做夜夜夜夜做| 中文字幕+乱码+中文乱码www| 欧美日韩综合一区| 亚洲成人第一区| 亚洲精品电影久久久| 国产爆初菊在线观看免费视频网站 | 久久久久久久久久久久国产精品| 99久久免费精品| 丁香激情五月少妇| 亚洲精品国产a久久久久久| 香蕉视频一区二区| 欧美日韩精品一区二区| 亚洲美女综合网| 伊人久久久久久久久久久| 黄色在线视频网站| 91精品国产高清久久久久久久久 | 成人在线视频网址| 久久99国内| 91传媒免费视频| 久久久蜜桃一区二区人| 91热视频在线观看| 久久看人人爽人人| 老湿机69福利| 色网综合在线观看| 国产成人精品毛片| 亚洲日本成人女熟在线观看| 超碰在线最新| 国产激情久久久| 国产精品17p| 在线播放 亚洲| 老司机一区二区三区| 韩国一区二区三区四区| 欧美经典三级视频一区二区三区| 欧美人禽zoz0强交| 欧美色播在线播放| 黄片毛片在线看| 日韩视频中文字幕| av综合电影网站| 国产伦精品一区二区三毛| 国产精品精品国产一区二区| 中文字幕乱码人妻综合二区三区 | 91视频免费观看网站| 悠悠色在线精品| 91中文字幕在线播放| 亚洲人成在线一二| av福利在线导航| 亚洲一区二区免费在线| 成人高清av| 欧美激情成人网| 91视视频在线观看入口直接观看www| 69av.com| 欧美日高清视频| av免费在线一区二区三区| 1769国内精品视频在线播放| 99久久久成人国产精品| 色噜噜色狠狠狠狠狠综合色一| 国产一级久久| 久草免费资源站| 亚洲精品老司机| 国产又粗又猛又爽又黄91| 亚洲小视频在线观看| 成人教育av| 久久综合中文色婷婷| 亚洲精品在线二区| 国产不卡一二三| 亚洲第一福利视频在线| 六月丁香色婷婷| 久久久久久12| 超碰精品在线观看| 国产乱人伦精品一区二区三区| 狠狠网亚洲精品| 国产尤物在线播放| 3d成人h动漫网站入口| 老司机精品视频在线观看6| 国产欧美一区二区三区视频| 99久久www免费| 99精品视频国产| 亚洲精品中文字幕在线观看| 国产乱淫av片免费| 久久成人av网站| 综合久久成人| 国产免费黄视频| 久久久国际精品| 中文字幕一区二区在线视频| 日韩在线一区二区三区免费视频| 曰本一区二区| 免费网站永久免费观看| 99久久久精品| 日本视频免费观看| 尤物tv国产一区| 成人国产精品久久| 国产女教师bbwbbwbbw| 成人黄色在线网站| 亚洲大片免费观看| www.亚洲一区| 一区二区三区四区高清视频| www.射射射| 欧美激情在线一区二区| 91午夜交换视频| 韩日精品中文字幕| 激情五月色综合国产精品| 日本肉体xxxx裸体xxx免费| 亚洲丝袜制服诱惑| 三级网站免费观看| 国产精品扒开腿做爽爽爽的视频| 久久一区二区三区喷水| 色哟哟免费视频| 欧美日韩另类字幕中文| 超碰免费在线| 丁香婷婷久久久综合精品国产| 在线亚洲激情| jizzjizz日本少妇| 精品精品国产高清一毛片一天堂| a欧美人片人妖| 日韩不卡一二区| 久久午夜色播影院免费高清| 一级特黄aa大片| 91国产美女在线观看| 日韩欧美精品一区| www.555国产精品免费| 欧美在线观看一二区| 羞羞污视频在线观看| 欧美一进一出视频| 粉嫩av一区二区三区粉嫩| 精品一区二区无码| 欧美肥臀大乳一区二区免费视频| 男男gay无套免费视频欧美 | 青草伊人久久| 男人天堂成人在线| 亚洲成人午夜影院| 尤物视频在线免费观看| 久久久久久九九| 国产成人亚洲精品狼色在线|