2017-05-08 113 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