2016-05-16 173 views
0

我在類路徑中使用了hibernate-validator的Spring 4應用程序。我有一個bean類,它爲bean屬性使用了一些javax驗證註釋,而我有另一個接受該bean的構造函數的類。Spring驗證不起作用

的Java:

public class Config { 

    @NotNull 
    @Size(min=10) 
    public final String test; 

    @Min(5) 
    public final int num; 

    public Config(String test, int num) { 
     this.test = test; 
     this.num = num; 
    } 

    //getters 
} 

public class Test { 
    private Config config; 
    public Test(@Valid Config config) { 
    this.config = config; 
    } 
} 

我的Spring應用程序上下文如下:

<bean id="config" class="com.Config"> 
    <constructor-arg type="java.lang.String"> 
     <value>aaaa</value> 
    </constructor-arg> 
    <constructor-arg type="int"> 
     <value>2</value> 
    </constructor-arg> 
</bean> 

<bean id="test" class="com.Test"> 
    <constructor-arg ref="config" /> 
</bean> 

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 

注意驗證在應用程序中定義。當我按原樣運行應用程序時,我期望在將bean設置到測試類構造函數中時引發異常,因爲這兩個參數不符合約束,但運行時沒有任何異常。我錯過了別的嗎?

回答

1

@Valid註釋旨在用於控制器方法,因此它不在您的構造函數中進行評估。

This old question指示如何通過使用Spring MVC公開和調用Controller來測試@Valid註釋。此外,如果您注意到其他註釋無效,請確保您的環境文件中有<mvc:annotation-driven />

+0

那麼有沒有辦法自動驗證?我是否需要使用驗證器來調用驗證方法?這不是一個web應用程序。 – user1491636

+0

你可以在你的類中實現'InitializingBean',Validator中的Autowire('@Autowired Validator validator'),然後在'validator.validate(this)'上調用驗證器,並聲明它返回一個空集。 –