Spring条件属性验证

时间:2017-05-08 16:12:07

标签: java spring validation

是否可以根据其他属性值使用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 个答案:

答案 0 :(得分:2)

尝试可以应用于@Bean方法的Spring 4 @Conditional注释。

import org.springframework.context.annotation.Condition;

@ConfigurationProperties
public class Property1 implements Condition{
    boolean property2Enabled;                 

    @Override
    public boolean matches()
       return property2Enabled;
    }
}
只有当property2Enabled的值为true时,才应该使用thisShouldBeValidated。否则忽略它。

import org.springframework.context.annotation.Condition;

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

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

如您所见,@Conditional被赋予一个指定条件的类 - 在本例中为Property1。 赋给@Conditional的类可以是实现条件的任何类型 接口