2017-06-06 34 views
3

如何在應用程序啓動期間檢查屬性文件中的值是否符合我的期望?直接註釋字段不起作用。 我使用的春天開機1.5.3.RELEASE,春天4.3.8.RELEASE在應用程序啓動過程中驗證@ Value-annotated字段

服務:

@Service 
@Validated 
public class ConfigService { 
    @URL 
    @Value("${checkout.url}") 
    private String checkoutUrl; 
    @Size(max = 26) 
    @Value("${checkout.payment-method}") 
    private String paymentMethod; 
} 

屬性文件(application.properties):

checkout.url=not-a-url-at-all 
checkout.payment-method=CreditCardButMuchTooLongToQualifyForSizeValidator 
+0

作爲一個選項,您可以註釋這些字段的設置者(而不是直接註釋字段)並在這些設置者中進行全部驗證。然後,如果驗證失敗,則可以拋出錯誤。 –

+0

@RomanProshin:在setter上設置驗證不起作用,我收到一個異常:交叉參數約束X沒有跨參數驗證器。 對方法的驗證是在返回值上執行的,對於安置者來說這是「無效」 – Zotov

+1

驗證僅適用於'@ ConfigurationProperties'註釋類與使用'@ EnableConfigurationProperties'結合使用。 –

回答

1

您可以使用在你的類此getter方法樣式驗證字符串長度:

@Size(min = Number, max = Number) 
public String getField() { 
    return field; 
} 

和驗證號碼:

@Max(Number) or @Min(Number) 

當數等於int值

如果領域不具有此限制,則會引發java.lang.IllegalStateException

不要忘記,如果你沒有這種依賴關係添加到您的POM :

<dependency> 
    <groupId>org.glassfish.web</groupId> 
    <artifactId>el-impl</artifactId> 
    <version>2.2</version> 
</dependency> 
+0

當Spring構造初始化時,Bean構造期間不會調用Getters。 – Zotov