精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

性生活三级视频| 337人体粉嫩噜噜噜| 欧美巨大xxxx做受沙滩| 国产不卡在线播放| 欧美一级视频在线观看| 中文字幕黄色网址| 伊人精品久久| 日本韩国欧美一区| 麻豆免费在线| 综合视频在线| 日韩精品免费在线视频观看| 九色91popny| 日本高清在线观看视频| 久久久精品蜜桃| 91精品国产一区二区三区动漫| 国产福利拍拍拍| 99久久99热这里只有精品| 亚洲电影在线观看| 思思久久精品视频| 精品国产第一福利网站| 伊人婷婷欧美激情| 色女人综合av| 五月激情婷婷网| 国产精品影视天天线| 日韩美女免费观看| 国产真实夫妇交换视频| 久久中文亚洲字幕| 亚洲人成电影网站| 亚洲天堂美女视频| 亚洲成人黄色| 6080国产精品一区二区| 成人一区二区三| 7777kkk亚洲综合欧美网站| 中文字幕视频一区| 日韩国产欧美精品| 色综合成人av| 成人av资源网站| 不卡的av一区| 国产jzjzjz丝袜老师水多 | 国产一区二区三区久久久| 日本精品久久中文字幕佐佐木| 久久网中文字幕| 综合激情婷婷| 欧美成人精品一区| 成年人av电影| 91精品久久久久久久久久不卡| 亚洲丝袜av一区| 3d动漫精品啪啪一区二区下载| 牛牛影视一区二区三区免费看| 欧美成va人片在线观看| 91视频免费入口| 韩国一区二区三区视频| 4438x成人网最大色成网站| 成年网站免费在线观看| 久久夜夜久久| 91精选在线观看| www.欧美激情.com| 精品国产乱码一区二区三区| 91精品久久久久久久99蜜桃| 欧美精品 - 色网| 玖玖玖视频精品| 日韩一二在线观看| 娇妻高潮浓精白浆xxⅹ| 九九热播视频在线精品6| 亚洲电影免费观看高清完整版在线观看 | 欧美在线播放一区二区| 毛片在线播放网址| 欧美国产1区2区| 中文字幕中文字幕在线中一区高清 | 成人av午夜影院| 国产伦视频一区二区三区| 亚洲天堂网2018| 欧美xxxx日本和非洲| 毛片无码国产| 欧美丝袜丝nylons| 日韩成人av免费| 91午夜精品| 日韩极品精品视频免费观看| 日韩人妻无码精品综合区| 国产中文字幕一区二区三区| 中文字幕日韩精品在线| 中文字幕电影av| 国产一区亚洲| 青青久久av北条麻妃海外网| 波多野结衣一区二区三区四区| 久久精品国产亚洲高清剧情介绍| 亚洲自拍欧美色图| 日韩二区三区| 国产精品久久久久aaaa樱花| 路边理发店露脸熟妇泻火| www.youjizz.com在线| 日本韩国欧美一区| 三级黄色片免费看| 国产精品视频一区二区三区四蜜臂| 日韩小视频在线观看| 国产无精乱码一区二区三区| 视频一区二区三区中文字幕| 91青草视频久久| 亚洲欧洲成人在线| 亚洲欧美福利一区二区| 看av免费毛片手机播放 | 国产日韩欧美一二三区| 精品久久久中文字幕人妻| 91免费观看视频| 欧美日韩一级在线| 日本综合字幕| 欧美成人午夜电影| 丁香六月激情综合| 国产精品久久久久久久久久妞妞| 国产精品网址在线| 人成免费电影一二三区在线观看| 亚洲欧美综合另类在线卡通| 国产成人精品视频免费看| 亚洲精品成人一区| 亚洲乱码一区二区| 久草免费在线观看视频| 免费的成人av| 欧美精品尤物在线| 男人添女人下部高潮视频在线观看| 91高清视频在线| 免费黄色三级网站| 亚洲影视一区| 国产精品视频成人| 三级视频网站在线| 亚洲一区二区欧美激情| 日本免费色视频| 国产精品手机在线播放| 性欧美办公室18xxxxhd| 国产超碰人人模人人爽人人添| 国产欧美日韩中文久久| 国产黄色一级网站| 国产精品对白| 欧美日韩xxx| 999免费视频| 中文字幕日韩一区| 欧美在线aaa| 欧洲杯半决赛直播| 日韩av免费看| 日韩欧美亚洲系列| 欧美日韩中文在线| 在线免费观看a级片| 精品99视频| 国产精品国色综合久久| 污片视频在线免费观看| 91精品国产一区二区三区蜜臀| 国产女主播喷水高潮网红在线| 亚洲人成人一区二区三区| 国产精品乱码| 538在线观看| 日韩av在线电影网| 99久热在线精品996热是什么| 91在线精品一区二区| 男女超爽视频免费播放| 久久香蕉精品香蕉| 91sa在线看| 欧美日韩伦理片| 色噜噜狠狠成人中文综合| 亚洲av片不卡无码久久| 久久xxxx精品视频| 日韩欧美三级一区二区| 成人黄色毛片| 久久久精品一区二区三区| 91精品国产乱码久久久| 亚洲色图制服诱惑| 俄罗斯女人裸体性做爰| 影音先锋久久资源网| 久久99国产精品| 欧洲一区二区三区精品| 国产一区二区久久精品| 亚洲图片欧美在线| 亚洲免费观看高清| 亚洲自拍偷拍精品| 老司机一区二区三区| 日韩在线导航| 精品视频在线观看网站| 久久久久久有精品国产| 亚洲人视频在线观看| 在线观看视频一区二区| 99自拍视频在线| 丰满白嫩尤物一区二区| 高清在线观看免费| 日韩免费一区| 国产精品香蕉视屏| 成人视屏在线观看| 久久综合久久88| 亚洲av片在线观看| 欧美精品丝袜久久久中文字幕| 妺妺窝人体色www婷婷| 久久精品欧美日韩| wwwxxxx在线观看| 亚洲女优在线| 裸体裸乳免费看| 五月国产精品| 成人精品一区二区三区电影免费 | 一级黄色片国产| 99精品欧美| 宅男一区二区三区| 欧美一区 二区| 91在线免费看网站| 黑人巨大亚洲一区二区久 | 欧美xxx网站| 不卡av电影在线观看| 天天影院图片亚洲| 欧美一区二区三区影视| 久久亚洲精品石原莉奈| 亚洲黄色性网站| 精品国产成人亚洲午夜福利| 国产激情精品久久久第一区二区 | 日韩欧美精品电影| 色综合五月天导航| 91在线不卡| 日韩精品在线观看网站| av在线免费在线观看| 日本大香伊一区二区三区| 久久精品波多野结衣| 国产精品无遮挡| 精品人妻一区二区三区香蕉 | 亚洲综合小说区| 欧美日韩在线精品一区二区三区激情综合 | 97影院秋霞午夜在线观看| 亚洲片av在线| 四虎影院在线播放| 精品福利视频一区二区三区| 亚洲自拍偷拍另类| 色成人在线视频| 青青操免费在线视频| 一区二区三区在线视频免费 | 亚洲综合一区二区精品导航| 成人免费视频入口| 国产欧美日韩亚州综合| 欧美亚一区二区三区| 成人黄色在线网站| 风韵丰满熟妇啪啪区老熟熟女| 久久精品999| 免费黄色一级网站| 日日摸夜夜添夜夜添国产精品| 毛片在线视频播放| 最新国产拍偷乱拍精品 | 视频一区在线视频| av动漫免费看| 久久国产精品久久久久久电车 | 日韩欧美一区电影| 国产偷拍一区二区| 欧美一级一级性生活免费录像| 一级黄色片视频| 欧美日韩午夜精品| 在线观看不卡的av| 欧美日产国产精品| 国产精品嫩草影院桃色| 欧美精品乱人伦久久久久久| 亚洲天堂2021av| 欧美日韩黄色影视| 97免费观看视频| 日韩一区二区三区视频在线观看| 国产毛片毛片毛片毛片| 91精品婷婷国产综合久久性色| 97超碰中文字幕| 欧美一区二区三区色| 999精品国产| 亚洲成人激情在线| 四虎影视精品成人| 一区二区三区国产视频| h视频网站在线观看| www.xxxx精品| 性欧美猛交videos| 97碰碰碰免费色视频| 欧美sm一区| 国产极品jizzhd欧美| 日本欧美在线| 国产v亚洲v天堂无码| 亚洲肉体裸体xxxx137| 日本一区二区三区视频免费看| 日本女优一区| 久操手机在线视频| 亚洲色诱最新| 2025韩国理伦片在线观看| 黑人巨大精品欧美黑白配亚洲| 四虎国产精品永久免费观看视频| 成人免费高清在线观看| 一级片手机在线观看| 国产精品免费网站在线观看| wwwav国产| 欧美日韩国产在线看| 久久精品99北条麻妃| 91.com在线观看| 五月天激情婷婷| 日韩一区二区欧美| 97蜜桃久久| 国产精品美女久久久久av超清| 国产精品xnxxcom| 久久99精品久久久久子伦| 成人情趣视频网站| 欧美这里只有精品| 视频一区视频二区中文| 日批视频免费看| 欧美国产国产综合| 日韩人妻无码一区二区三区99 | 中文字幕电影一区| 不卡的免费av| 欧美另类高清zo欧美| 天天射,天天干| 久久久国产精品免费| 爱情电影社保片一区| 51成人做爰www免费看网站| 亚洲人成网www| 国产xxxx振车| 蜜臀国产一区二区三区在线播放 | 国产图片一区| 宅男在线精品国产免费观看| 麻豆亚洲精品| 91九色蝌蚪porny| 亚洲视频网在线直播| 7799精品视频天天看| 欧美mv日韩mv国产| 男人在线资源站| 欧美亚洲在线视频| 亚洲综合影院| 曰韩不卡视频| 日韩不卡免费视频| 香蕉视频黄色在线观看| 亚洲资源中文字幕| 99热这里只有精品在线| 丝袜亚洲另类欧美重口| 成人性生交大片免费网站| 动漫3d精品一区二区三区| 婷婷综合亚洲| 黄色片视频在线| 国产无遮挡一区二区三区毛片日本| 国产一卡二卡在线播放| 欧美一区二区三区系列电影| 麻豆av免费在线观看| 国产精品久久激情| 欧美美女在线观看| 黄色片久久久久| 久久综合给合久久狠狠狠97色69| 国产亚洲精品av| 精品国产一二三| 日本h片在线| 97人人模人人爽人人少妇| 亚洲色图插插| 色网站在线视频| 亚洲精品视频在线观看免费| 国产精品视频第一页| 久久人人爽人人爽人人片亚洲| 精品福利在线| 中文字幕精品一区日韩| 黑人精品欧美一区二区蜜桃| 亚洲av无一区二区三区| 欧美久久久久久蜜桃| 男人影院在线观看| 亚洲精品欧美日韩专区| 欧美激情偷拍| 亚洲一二三四五| 五月婷婷综合网| 日产精品久久久久久久性色| 欧美专区第一页| 国产精品嫩模av在线| 超碰超碰在线观看| 国产精品国产三级国产aⅴ中文 | 日本午夜精品电影| 日本成人在线视频网站| 老司机精品免费视频| 91精品国产免费| 波多野结衣在线观看| 欧美xxxx黑人又粗又长精品| 久久一二三四| 国产又粗又猛又爽又黄的视频小说| 欧美精品日日鲁夜夜添| 久草在线视频资源| 麻豆精品传媒视频| 蜜臀久久99精品久久久画质超高清 | 91欧美日韩麻豆精品| 久久不射热爱视频精品| 国产精品极品| 无码无遮挡又大又爽又黄的视频| 欧美激情在线一区二区| 国产亲伦免费视频播放| 天天操天天干天天综合网| 香蕉网在线播放| 欧美在线免费观看亚洲| 黄色网址免费在线观看| 高清不卡日本v二区在线| 鲁大师影院一区二区三区| 中文字幕第69页| 精品福利在线导航| 成人免费av电影| 日韩精品一区二区在线视频| 91视频91自| 国产女人高潮的av毛片| 97色在线播放视频| 欧美独立站高清久久| 丝袜熟女一区二区三区| 欧美日韩国产精品成人| sm久久捆绑调教精品一区| 亚洲人成77777| 9i在线看片成人免费| 91肉色超薄丝袜脚交一区二区| 91国产精品电影| 亚洲天天综合| 在线观看日本中文字幕|