Spring:验证整个对象的方法

时间:2014-05-23 22:31:56

标签: java spring validation spring-mvc

假设我使用一些验证注释定义了我的Entity类:

public class Entity {
    @Column(unique = true)
    @NotNull
    private String login;

    @NotNull
    private String password;

    @Email
    private String email;
}

我知道可以使用参数中的Entity注释以及关联的错误对象验证新的@Valid

但是,我需要在另一个方法的中间创建一个新的Entity,我需要验证构造的实体是否正确(它匹配在类的定义中使用注释声明的限制):

public whateverMethod(...) {
    Entity e = new Entity(a, b, c, ...);
    validate(e); // I need something like this
}

我在Spring文档中找不到这样的内容。

任何帮助?

1 个答案:

答案 0 :(得分:1)

您可以使用Validator注入LocalValidatorFactoryBean对象,然后使用该验证程序验证您的实体。

Bean声明:

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

您的服务:

@Service
public class fooService {

    @Autowired
    Validator validator

    public whateverMethod(...) {
        Entity e = new Entity(a, b, c, ...);
        Set<ConstraintViolation<Entity>> = validator.validate(e); 
    }
}

如果您不想注入bean,可以执行以下操作:

public class fooClass {

    public whateverMethod(...) {
        Entity e = new Entity(a, b, c, ...);

        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();

        Set<ConstraintViolation<Entity>> = validator.validate(e); 
    }
}

请注意,JSR-303提供程序(例如Hibernate Validator)应该出现在类路径中,并会自动检测到。