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




















沒有留言:

張貼留言

海科面試問題

 1 關於 java中的spring 有ioc和aop可以介紹一下分別是在做什麼嗎? 在Java的Spring框架中,IoC(控制反轉)和AOP(面向切面編程)是兩個非常重要的概念。 1. IoC(控制反轉) IoC是一種設計模式,主要用於改進代碼的可維護性和可測試性。在IoC中...