SpringBoot yaml語(yǔ)法與JRS303校驗(yàn)超詳細(xì)講解
基本要點(diǎn)
1、properties和yaml文件
properties文件中的配置只支持鍵值對(duì)的形式,例如
server.port = 8081
yaml文件可以支持鍵值對(duì)、對(duì)象、數(shù)組(對(duì)空格的要求極其嚴(yán)格)
name: decade #對(duì)象 student: name: decade age: 21 #對(duì)象的行內(nèi)寫法 student: {name: decade,age: 21} #數(shù)組 pets: - cat - dog - pig pets: [cat,dog,pig]
2、給屬性賦值的幾種方式
1)如果使用*.properties作為配置文件,給屬性賦值可以使用@Value
關(guān)鍵注解:@PropertySource+@Value
@PropertySource注解的value需要填關(guān)聯(lián)配置文件的路徑
注意:如果配置文件是application.properties,下面@ConfigurationProperties+@Component的注解也可以獲取配置文件中的配置項(xiàng)
首先我們需要將idea中配置文件的編碼格式改為utf8
然后我們定義一個(gè)實(shí)體類,使用EL表達(dá)式引用配置文件中的配置項(xiàng)
package com.decade.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; @Data @AllArgsConstructor @NoArgsConstructor @Component @PropertySource("classpath:application.properties") public class Dog { @Value("${dog.name}") private String name; }
2)使用yaml文件給屬性賦值
@Component:將類注冊(cè)成容器中的組件(使用configurationProperties的前提)
@ConfigurationProperties:注解可以將類中的屬性和配置文件中的進(jìn)行綁定
該注解的屬性prefix表示要在yaml文件中尋找以改屬性值為開頭的配置項(xiàng)進(jìn)行綁定,例如@ConfigurationProperties(prefix = “people”)
松散綁定:yaml文件中的屬性可以是下劃線連接,實(shí)體類中可以是駝峰命名
例如yaml中是last_name,實(shí)體類中是lastName
package com.decade.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; @Data @AllArgsConstructor @NoArgsConstructor @Component @ConfigurationProperties(prefix = "people") public class People { private String name; private Integer age; private Boolean isHappy; private Date birth; private Map<String, Object> maps; private List<Object> list; private Dog dog; }
如果添加注解爆紅,那么需要在pom文件中添加一下下面這個(gè)依賴
這個(gè)依賴可以將我們的實(shí)體類與yaml文件關(guān)聯(lián)起來(lái),這樣我們?cè)趛aml文件中進(jìn)行配置配置項(xiàng)時(shí),可以自動(dòng)聯(lián)想實(shí)體類中的屬性
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
下面是2種方式的配置文件
最后我們寫一個(gè)測(cè)試類測(cè)試一下兩種方式是否導(dǎo)入成功
package com.decade; import com.decade.pojo.Dog; import com.decade.pojo.People; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class SpringbootStudyApplicationTests { @Autowired private People people; @Autowired private Dog dog; @Test void contextLoads() { System.out.println(people); System.out.println("========================"); System.out.println(dog); } }
運(yùn)行結(jié)果如下,驗(yàn)證通過
3、JRS303校驗(yàn)
在日常開發(fā)中,我們經(jīng)常會(huì)遇到需要對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)的場(chǎng)景,例如非空校驗(yàn)和格式校驗(yàn)
這個(gè)時(shí)候,JRS303校驗(yàn)就能派上用場(chǎng),如果數(shù)據(jù)不滿足標(biāo)準(zhǔn),則會(huì)統(tǒng)一拋出異常,方便異常中心統(tǒng)一處理
首先,我們需要導(dǎo)入相關(guān)依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
接著,我們?cè)谛枰r?yàn)的屬性所屬的類上使用@Validated注解
在校驗(yàn)的字段上添加相關(guān)注解,常用注解如下
@Null 驗(yàn)證對(duì)象是否為null
@NotNull 驗(yàn)證對(duì)象是否不為null, 無(wú)法查檢長(zhǎng)度為0的字符串
@NotBlank 檢查約束字符串是不是Null還有被Trim的長(zhǎng)度是否大于0,只對(duì)字符串,且會(huì)去掉前后空格.
@NotEmpty 檢查約束元素是否為NULL或者是EMPTY.
Booelan檢查
@AssertTrue 驗(yàn)證 Boolean 對(duì)象是否為 true
@AssertFalse 驗(yàn)證 Boolean 對(duì)象是否為 false
長(zhǎng)度檢查
@Size(min=, max=) 驗(yàn)證對(duì)象(Array,Collection,Map,String)長(zhǎng)度是否在給定的范圍之內(nèi)
@Length(min=, max=) Validates that the annotated string is between min and max included.
日期檢查
@Past 驗(yàn)證 Date 和 Calendar 對(duì)象是否在當(dāng)前時(shí)間之前,驗(yàn)證成立的話被注釋的元素一定是一個(gè)過去的日期
@Future 驗(yàn)證 Date 和 Calendar 對(duì)象是否在當(dāng)前時(shí)間之后 ,驗(yàn)證成立的話被注釋的元素一定是一個(gè)將來(lái)的日期
@Pattern 驗(yàn)證 String 對(duì)象是否符合正則表達(dá)式的規(guī)則,被注釋的元素符合制定的正則表達(dá)式,regexp:正則表達(dá)式 flags: 指定 Pattern.Flag 的數(shù)組,表示正則表達(dá)式的相關(guān)選項(xiàng)。
數(shù)值檢查
建議使用在Stirng,Integer類型,不建議使用在int類型上,因?yàn)楸韱沃禐?ldquo;”時(shí)無(wú)法轉(zhuǎn)換為int,但可以轉(zhuǎn)換為Stirng為”“,Integer為null
@Min 驗(yàn)證 Number 和 String 對(duì)象是否大等于指定的值
@Max 驗(yàn)證 Number 和 String 對(duì)象是否小等于指定的值
@DecimalMax 被標(biāo)注的值必須不大于約束中指定的最大值. 這個(gè)約束的參數(shù)是一個(gè)通過BigDecimal定義的最大值的字符串表示.小數(shù)存在精度
@DecimalMin 被標(biāo)注的值必須不小于約束中指定的最小值. 這個(gè)約束的參數(shù)是一個(gè)通過BigDecimal定義的最小值的字符串表示.小數(shù)存在精度
@Digits 驗(yàn)證 Number 和 String 的構(gòu)成是否合法
@Digits(integer=,fraction=) 驗(yàn)證字符串是否是符合指定格式的數(shù)字,interger指定整數(shù)精度,fraction指定小數(shù)精度。
@Range(min=, max=) 被指定的元素必須在合適的范圍內(nèi)
@Range(min=10000,max=50000,message=”range.bean.wage”)
@Valid 遞歸的對(duì)關(guān)聯(lián)對(duì)象進(jìn)行校驗(yàn), 如果關(guān)聯(lián)對(duì)象是個(gè)集合或者數(shù)組,那么對(duì)其中的元素進(jìn)行遞歸校驗(yàn),如果是一個(gè)map,則對(duì)其中的值部分進(jìn)行校驗(yàn).(是否進(jìn)行遞歸驗(yàn)證)
@CreditCardNumber信用卡驗(yàn)證
@Email 驗(yàn)證是否是郵件地址,如果為null,不進(jìn)行驗(yàn)證,算通過驗(yàn)證。
@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)
我們限制People的name屬性不可為空并且在message屬性中自定義錯(cuò)誤信息
然后在配置文件中將該值設(shè)置為空,運(yùn)行測(cè)試類提示如下
注意:
JRS303只可用于@ConfigurationProperties修飾的類
對(duì)于@PropertySource+@Value修飾的屬性不生效
如圖所示,我們把dog.name置空,運(yùn)行測(cè)試代碼,也不會(huì)出現(xiàn)報(bào)錯(cuò)
到此這篇關(guān)于SpringBoot yaml語(yǔ)法與JRS303校驗(yàn)超詳細(xì)講解的文章就介紹到這了,更多相關(guān)SpringBoot yaml語(yǔ)法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
RabbitMQ排他性隊(duì)列Exclusive Queue詳解
這篇文章主要介紹了RabbitMQ排他性隊(duì)列Exclusive Queue詳解,如果你想創(chuàng)建一個(gè)只有自己可見的隊(duì)列,即不允許其它用戶訪問,RabbitMQ允許你將一個(gè)Queue聲明成為排他性的Exclusive Queue,需要的朋友可以參考下2023-08-08深入理解Java SpringCloud Ribbon 負(fù)載均衡
Ribbon是一個(gè)客戶端負(fù)載均衡器,它提供了對(duì)HTTP和TCP客戶端的行為的大量控制。這篇文章主要介紹了SpringCloud Ribbon 負(fù)載均衡的實(shí)現(xiàn),感興趣的小伙伴們可以參考一下2021-09-09plsql實(shí)現(xiàn)DES對(duì)稱加密 Java解密
這篇文章主要介紹了plsql實(shí)現(xiàn)DES對(duì)稱加密 Java解密的方法,幫助大家更好的理解和學(xué)習(xí)使用Oracle與Java,感興趣的朋友可以了解下2021-02-02springboot通過spel結(jié)合aop實(shí)現(xiàn)動(dòng)態(tài)傳參的案例
SpEl 是Spring框架中的一個(gè)利器,Spring通過SpEl能在運(yùn)行時(shí)構(gòu)建復(fù)雜表達(dá)式、存取對(duì)象屬性、對(duì)象方法調(diào)用等,今天通過本文給大家介紹springboot?spel結(jié)合aop實(shí)現(xiàn)動(dòng)態(tài)傳參,需要的朋友可以參考下2022-07-07Java多例Bean的應(yīng)用場(chǎng)景-easyExcel導(dǎo)入
EasyExcel 是一個(gè)基于 Java 的簡(jiǎn)單、省內(nèi)存的讀寫 Excel 的開源項(xiàng)目。這篇文章主要介紹了用easyExcel導(dǎo)入Java Bean的應(yīng)用場(chǎng)景,感興趣的朋友可以參考閱讀2023-04-04Java設(shè)計(jì)模式之23種設(shè)計(jì)模式詳解
這篇文章主要介紹了Java設(shè)計(jì)模式之23種設(shè)計(jì)模式詳解,設(shè)計(jì)模式使代碼編制真正工程化,設(shè)計(jì)模式是軟件工程的基石,項(xiàng)目中合理的運(yùn)用設(shè)計(jì)模式可以完美的解決很多問題,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07SpringBoot打包發(fā)布到linux上(centos 7)的步驟
這篇文章主要介紹了SpringBoot打包發(fā)布到linux上(centos 7)的步驟,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-12-12詳解idea文件右鍵創(chuàng)建New沒有Create New Servlet的解決辦法
這篇文章主要介紹了詳解idea文件右鍵創(chuàng)建New沒有Create New Servlet的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12springBoot server.port=-1的含義說(shuō)明
這篇文章主要介紹了springBoot server.port=-1的含義說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08jdk17?SpringBoot?JPA集成多數(shù)據(jù)庫(kù)的示例詳解
這篇文章主要介紹了jdk17?SpringBoot?JPA集成多數(shù)據(jù)庫(kù)的示例代碼,包括配置類、請(qǐng)求攔截器、線程上下文等相關(guān)知識(shí),代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08