2020年11月20日 星期五

[SpringBoot 1.5] @ConfigurationProperties 與 @Value 使用介紹與主要差異

 前面一篇我們已經看過yaml與@ConfigurationProperties的合用

現在我們來看看@Value的使用

在appplication.properties為如下的情況

person.lastname=張三
person.age=18
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=dog
person.dog.age=15
我們只要在屬性上加上
@Value("${person.lastname}")
這樣就能夠取到值了
如下圖

但是要特別注意, 如果是複雜的類型封裝是不支持的
也就是下面的Map是無法用value注入
而另外一方面@ConfigurationProperties還有一個特殊功能-資料驗證
要做到這個要再加兩件事
1在類別上加上@Validated
2在屬性上加入要驗證的如@Email
另外阿~有可能@Email會報紅字
就需要在dependencies中加入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
我加了之後再重新下載maven資源, 發現他還是報錯
後來我重開之後, 他pom檔案沒有紅字, 試一下就能用
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

//@Value("${person.lastname}")
@Email
private String lastname;
我們的lastname為我們的驗證項目
但是其中的字串為"張三", 並不是email格式
於是run之後就會有以下這一段







這樣就具有驗證效果了

下面我們示範在Controller中@Value的使用方式
我們先造一個HelloController
另一個私有的變數並冠以@Value

@RestController
public class HelloController {
@Value("${person.lastname}")
private String name;

@RequestMapping("/sayHello")
public String sayHello(){
return "Hello "+name;
}
}

然後我們開啟服務, 訪問一下,就能得到下圖
那@ConfigurationProperties 與 @Value 使用介紹與主要差異
為以下下圖


如果說, 我們只是在某個業務邏輯中需要獲取一下配置文件中的某項值, 使用@Value;
如果說, 我們專門編寫了一個javaBean來和配置文件進行映射, 我們就值接使用@ConfigurationProperties

以上內容請參考 尚硅谷IT培訓學校
https://www.youtube.com/watch?v=eyqiiWbBlMs&list=PLmOn9nNkQxJEFsK2HVO9-WA55Z7LZ2N0S&index=13




















沒有留言:

張貼留言

進修6個月後, 找到工作了

這次找工作有一些感想 我是覺得, 邊準備邊找還是有點差勁的方式 這等同我前面幾家會有機會被直接浪費掉 但是面試會問的問題, 真的涵蓋的太廣, 要每個都準備熟悉,  (突然想到一個靈感, 寫一個網頁來隨機出題, 然後自己考自己, 或許寫成app) 大約準備上, 是可以看黑馬程序員出...