【问题标题】:Spring with bean validation not working带有bean验证的Spring不起作用
【发布时间】:2016-09-12 15:34:43
【问题描述】:

我在类路径上有一个带有休眠验证器的 Spring 4 应用程序。我有一个 bean 类,它对 bean 属性使用一些 javax 验证注释,并且我有另一个类在它的构造函数中接受该 bean。

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 设置到测试类构造函数中时会引发异常,因为这两个参数不符合约束,但它运行时没有任何异常。我还缺少其他东西吗?

【问题讨论】:

    标签: java spring bean-validation


    【解决方案1】:

    @Valid 注解用于 Controller 方法,因此不会在您的构造函数中进行评估。

    这个old question 说明了如何通过使用Spring MVC 公开和调用控制器来测试@Valid 注释。此外,如果您发现其他注释不起作用,请确保您的上下文文件中有 &lt;mvc:annotation-driven /&gt;

    【讨论】:

    • 那么没有办法自动验证吗?我是否需要使用验证器显式调用验证方法?这不是网络应用程序。
    • 你可以在你的类中实现InitializingBean,在Validator(@Autowired Validator validator)中实现Autowire,然后在validator.validate(this)上调用validator并断言它返回一个空集。
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2021-08-11
    • 2015-04-20
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多