相关疑难解决方法(0)

在JSR-303自定义验证器中未自动装配的依赖关系

我有一个包含User类的Spring Boot应用程序 - 所有字段都有标准的JSR-303注释(@ NotNull,@ Size等),并且验证工作正常.

但是,当我向User添加自定义验证时,我无法将依赖注入到自定义验证器中:

@Component
public class UniqueUsernameValidator implements 
ConstraintValidator<UniqueUsername, String> {

@Autowired
private UserRepository userRepository;

@Override
public boolean isValid(String username, ConstraintValidatorContext context) {
    // implements logic
}
Run Code Online (Sandbox Code Playgroud)

@UniqueUsername注释声明为:

@Documented
@Retention(RUNTIME)
@Target({FIELD, ANNOTATION_TYPE, PARAMETER})
@Constraint(validatedBy = UniqueUsernameValidator.class)
@interface UniqueUsername {
   String message() default "{com.domain.user.nonUniqueUsername}";
   Class<?>[] groups() default { };
   Class<? extends Payload>[] payload() default { };
}
Run Code Online (Sandbox Code Playgroud)

带注释的字段:

@NotBlank
@Size(min = 2, max = 30)
@UniqueUsername
private String username;
Run Code Online (Sandbox Code Playgroud)

验证器用法:

@Service
public final class UserService {

   private …
Run Code Online (Sandbox Code Playgroud)

java spring bean-validation

13
推荐指数
1
解决办法
640
查看次数

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
查看次数

JSR-303依赖注入和Hibernate

Spring 3.0.2,Hibernate 3.5.0,Hibernate-Validator 4.0.2.GA

我试图使用以下方法将Spring依赖项注入ConstraintValidator:

@PersistenceContext
private EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)

我已经配置了应用程序上下文:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
Run Code Online (Sandbox Code Playgroud)

根据Spring文档,应该允许"自定义ConstraintValidators像其他任何Spring bean一样受益于依赖注入"

在调试器中,我可以看到Spring调用getBean来创建ConstraintValidator.稍后当flush触发preInsert时,会创建并调用另一个ConstraintValidator.问题是EntityManager在这个新的ConstraintValidator中是null.我尝试在ConstraintValidator中注入其他依赖项,这些依赖项始终为null.

有谁知道是否有可能将依赖注入ConstraintValidator?

validation spring hibernate dependency-injection bean-validation

9
推荐指数
3
解决办法
1万
查看次数