2015-11-21 20 views
6

@ConfigurationPropertiesアノテーションを使用してBeanにプロパティーを注入する場合、Springはカスタム・バリデーターを定義してそれらのプロパティーを検証する機能を提供します。Spring環境の複数の@ConfigurationPropertiesバリデーター・ビーンズ

ConfigurationPropertiesBindingPostProcessorは、固定のbean名"configurationPropertiesValidator"とクラスorg.springframework.validation.Validatorを使用してこのバリデータを検索します。

ここで、モジュールAにバリデーターを持つ@ConfigurationPropertiesがあるとします。別のモジュールBはモジュールAに依存しています。また、モジュールBは独自の@ConfigurationPropertiesとそれ自身のバリデーターを定義しています。

アプリケーションが読み込まれると、ポストプロセッサーはこれらのBeanの1つのみを取り出します。これにより、検証の他の部分が無効になります。

これに対する解決策はありますか?アプリケーションで両方の構成プロパティバリデータを有効にしておくにはどうすればよいですか?

答えて

6

私はちょうど同じ問題に遭遇し、ConfigurationPropertiesBindingPostProcessorは、@ConfigurationPropertiesで注釈付けされたクラスがValidatorインターフェイス自体を実装しているかどうかを確認することに気付きました。

org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor#determineValidatorを参照)ので、解決策は、注釈付きプロパティクラスに、すべてのプロパティの検証を移動することです:

import org.springframework.boot.context.properties.ConfigurationProperties; 
import org.springframework.stereotype.Component; 
import org.springframework.validation.Errors; 
import org.springframework.validation.ValidationUtils; 
import org.springframework.validation.Validator; 

@ConfigurationProperties("test.properties") 
@Component 
public class TestProperties implements Validator { 

    private String myProp; 

    public String getMyProp() 
    { 
     return myProp; 
    } 

    public void setMyProp(String myProp) 
    { 
     this.myProp = myProp; 
    } 

    public boolean supports(Class<?> clazz) 
    { 
     return clazz == TestProperties.class; 
    } 

    public void validate(Object target, Errors errors) 
    { 
     ValidationUtils.rejectIfEmpty(errors, "myProp", "myProp.empty"); 

     TestProperties properties = (TestProperties) target; 

     if (!"validThing".equals(properties.getMyProp())) { 
      errors.rejectValue("myProp", "Not a valid thing"); 
     } 
    } 
} 
+0

私もちょうどそれをすることによって、デフォルトの 'configurationPropertiesValidator'が戻っ' Jsr303ValidatorFactory'これに戻りますことを実現しましたカスタムValidatorの実装とJSR-303アノテーションの両方でプロパティを検証できることを意味します。 –

+0

私はこれをうまく動作させることができません。私の顧客Validatorを無視しているようです – Plog