java - Spring 的 bean 验证不起作用

标签 java spring bean-validation

我有一个 Spring 4 应用程序,其类路径上带有 hibernate-validator。我有一个 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" />

请注意, validator 是在应用程序上下文中定义的。当我按原样运行应用程序时,我希望在将 bean 设置到测试类构造函数中时抛出异常,因为这两个参数不满足约束,但它运行时没有任何异常。我还漏掉了什么吗?

最佳答案

@Valid注释旨在用于 Controller 方法,因此不会在构造函数中对其进行评估。

这个old question指示如何测试 @Valid通过使用 Spring MVC 公开和调用 Controller 来进行注释。另外,如果您发现其他注释不起作用,请确保您有 <mvc:annotation-driven />上下文文件中的某个位置。

关于java - Spring 的 bean 验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37260799/

相关文章:

java - 通过 "mixins"验证

gwt - 如何使用域类(RequestFactory)上的注释规则进行客户端验证?

java - java中如何将int[]转为Integer[]?

java - Spring 中的服务外观

java - 注解 @Column( nullable = false ) vs @NotNull 区别

java - 如何使用 Spring Security 通过 InMemoryAuthentication 登录自定义用户?

java - Hibernate "no session or session was closed"即使在事务方法中绑定(bind)了 session

java - 如何在 Android 中将 XML 转换为 Java 对象

java - 使用 java.io.File 在 Eclipse 中创建目录

java - 更改以编程方式生成的 TextInputLayout 的下划线颜色