相关疑难解决方法(0)

在ConstraintValidator中注入服务[Bean Validator - JSR 303] Spring

下午好,

我在Bean验证器(JSR 303)中注入服务时遇到问题.我将执行验证,但我需要在我的数据库中验证此记录;

当我使用我的服务时,它会抛出NullPointerException;

例外:

Exception in thread "main" javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.
at org.hibernate.validator.internal.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:294)
at org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:164)
at org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:125)
at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:86)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:442)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:387)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:351)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:303)
at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:133)
at net.pontoall.hemisphere.core.validation.impl.TesteValidator.main(TesteValidator.java:25)



Caused by: java.lang.NullPointerException
at net.pontoall.hemisphere.core.validation.impl.UsuarioValidatorImpl.doCheckLogin(UsuarioValidatorImpl.java:48)
at net.pontoall.hemisphere.core.validation.impl.UsuarioValidatorImpl.isValid(UsuarioValidatorImpl.java:26)
at net.pontoall.hemisphere.core.validation.impl.UsuarioValidatorImpl.isValid(UsuarioValidatorImpl.java:1)
at org.hibernate.validator.internal.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:291)
... 9 more
Run Code Online (Sandbox Code Playgroud)

注解:

@Target(value = ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = UsuarioValidatorImpl.class)
public @interface UsuarioValidator {

String message() default "{net.pontoall.hemisphere.validation.UsuarioValidator.message}";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

}
Run Code Online (Sandbox Code Playgroud)

ValidatorImpl:

public class …
Run Code Online (Sandbox Code Playgroud)

validation spring bean-validation

15
推荐指数
1
解决办法
2万
查看次数

Autowired在Custom Constraint验证器中提供Null值

我对Spring来说是全新的,我已经在SO上找到了一些问题的答案.以下是链接:

Spring 3.1自动装配在自定义约束验证器中不起作用

将服务自动装配到验证器中

Autowired Repository在自定义约束验证器中为空

我有一个Spring项目,我想在其中使用Hibernate Validator进行对象验证.基于我在网上阅读的内容和一些论坛,我试图注入验证器如下:

@Bean
  public Validator validator() {
    return new LocalValidatorFactoryBean().getValidator();
  }
Run Code Online (Sandbox Code Playgroud)

但无论我在哪里使用

@Autowired
Validator validator;
Run Code Online (Sandbox Code Playgroud)

它采用了Spring的验证器实现而不是Hibernate的验证器.我无法弄清楚如何准确地注入Hibernate验证器并简单地将其自动装配到其他类中,所以我使用了一个便宜的技巧,现在我的Java Config看起来像这样

@Bean
      public Validator validator() {
        // ValidatorImpl is Hibernate's implementation of the Validator
        return new ValidatorImpl();
      }
Run Code Online (Sandbox Code Playgroud)

(我真的很感激,如果有人能指出我如何避免以这种Hacky方式获得Hibernate Validator的正确方向)

但是让我们来看看主要问题:

这是自定义验证定义

@Target( { METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER } )
@Retention(RUNTIME)
@Constraint(validatedBy = EmployeeValidator.class)
@Documented
public @interface EmployeeValidation {
String message() default "{constraints.employeeConstraints}";
public abstract Class<?>[] groups() default {};
public abstract Class<? extends Payload>[] payload() …
Run Code Online (Sandbox Code Playgroud)

java validation spring spring-mvc hibernate-validator

11
推荐指数
1
解决办法
8464
查看次数

春天的验证者应该访问数据库吗?

我不确定根据数据库状态使验证器验证命令是否是一个好的设计决策.例如,如果我需要验证User bean,除了检查电子邮件和用户名是否为空等.如果已经使用过,我还需要拒绝它们.这种逻辑应该放在验证器还是服务对象中?

java validation spring spring-mvc

9
推荐指数
2
解决办法
5114
查看次数