2017-05-08 129 views
1

是否可以使用基於另一個屬性值的spring屬性驗證?春季條件屬性驗證

我無法使用@ConditionalOnProperty,因爲該屬性在很多地方使用。我不能只爲每個bean放置@ConditionalOnProperty。

以下是我有:

@ConfigurationProperties 
public class Property1 { 
    boolean property2Enabled 
} 

@ConfigurationProperties 
public class Property2 { 
    @NotNull 
    @Size(min = 1) 
    String thisShouldBeValidated; 

} 

在這種情況下thisShouldBeValidated驗證應該只應用於如果property2Enabled的值是true。

是否可以用一些春季註釋做到這一點? 如果我編寫自定義驗證可以以某種方式獲取property2Enabled的值,如果這樣?

回答

1

嘗試Spring 4 @Conditional註釋,可以應用於@Bean方法。

import org.springframework.context.annotation.Condition; 
@ConfigurationProperties 
public class Property1 implements Condition{ 

@Override 
public boolean matches() 
boolean property2Enabled; 
return property2Enabled; 
} 
} 

只有當property2Enabled的值爲true時才應用thisShouldBeValidated。否則它被忽略。

import org.springframework.context.annotation.Condition; 
    public class Property2 { 
    @NotNull 
    @Size(min = 1) 

    @Bean 
    @Conditional(Property1.class) 
    void Property2 yourMethod() { 
    system.out.println("whatever"+ thisShouldBeValidated); 
    }   
    } 

正如你所看到的,@Conditional被賦予一個類,指定的條件,在這種情況下,Property1。 給予@Conditional的類可以是實現條件 接口的任何類型。

+0

此解決方案與我無法使用的@ConditionalOnProperty類似。 我需要一個解決方案,無效Property2 yourMethod()總是返回Property2但沒有驗證如果property2Enabled = false – bazsoja