Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在自定义Hibernate验证程序上使用Spring依赖项注入_Java_Spring_Hibernate_Dependency Injection_Hibernate Validator - Fatal编程技术网

Java 在自定义Hibernate验证程序上使用Spring依赖项注入

Java 在自定义Hibernate验证程序上使用Spring依赖项注入,java,spring,hibernate,dependency-injection,hibernate-validator,Java,Spring,Hibernate,Dependency Injection,Hibernate Validator,我想创建自己的Hibernate自定义验证器,我想做的是根据从不同上下文(不同的Springbean)收集的一些信息添加自定义逻辑 在我的自定义实现中,我尝试在Springbean中添加构造函数和定义验证器,或者使用Autowire注释,但都没有成功 Autowire示例: public class MyCustomValidator implements ConstraintValidator<CustomConstraint, String> { @Autowired

我想创建自己的Hibernate自定义验证器,我想做的是根据从不同上下文(不同的Springbean)收集的一些信息添加自定义逻辑

在我的自定义实现中,我尝试在Springbean中添加构造函数和定义验证器,或者使用Autowire注释,但都没有成功

Autowire示例:

public class MyCustomValidator implements ConstraintValidator<CustomConstraint, String> {
    @Autowired
    private MyCustomChecker customChecker;

    @Override
    public void initialize(CustomConstraint constraintAnnotation) {
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (null == value) {
            return true;
        }

        //get user authenticated properties to perform validation based on the user
        AuthenticatedIdentity identity = Context.getAuthenticatedIdentity();
        return customChecker.isWhitelisted(identity);
    }
}
公共类MyCustomValidator实现ConstraintValidator{
@自动连线
私人MyCustomChecker;
@凌驾
公共void初始化(CustomConstraint约束旋转){
}
@凌驾
公共布尔值有效(字符串值、ConstraintValidatorContext上下文){
if(null==值){
返回true;
}
//获取用户已验证的属性以基于用户执行验证
AuthenticatedIdentity=Context.getAuthenticatedIdentity();
返回customChecker.isWhiteList(标识);
}
}
构造函数示例:

public class MyCustomValidator implements ConstraintValidator<CustomConstraint, String> {

    private MyCustomChecker customChecker;

    public MetricDataSizeValidator(MyCustomChecker customChecker) {
        this.customChecker = customChecker;
    }

    @Override
    public void initialize(CustomConstraint constraintAnnotation) {
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (null == value) {
            return true;
        }

        //get user authenticated properties to perform validation based on the user
        AuthenticatedIdentity identity = Context.getAuthenticatedIdentity();
        return customChecker.isWhitelisted(identity);
    }
}
公共类MyCustomValidator实现ConstraintValidator{
私人MyCustomChecker;
公共MetricDataSizeValidator(MyCustomChecker customChecker){
this.customChecker=customChecker;
}
@凌驾
公共void初始化(CustomConstraint约束旋转){
}
@凌驾
公共布尔值有效(字符串值、ConstraintValidatorContext上下文){
if(null==值){
返回true;
}
//获取用户已验证的属性以基于用户执行验证
AuthenticatedIdentity=Context.getAuthenticatedIdentity();
返回customChecker.isWhiteList(标识);
}
}
我已经在网上读过了,但这并不能完全回答我的问题

我敢肯定,当您想要基于不同上下文中的一些信息进行验证时,这是一个常见的问题,但是我没有找到解决这个问题的答案

我的应用程序使用SpringDI,我的bean已经像这样初始化了

<bean id="customChecker" class="com.mycomp.CustomChecker">
    <constructor-arg>
        <value>arg</value>
    </constructor-arg>
</bean>

arg
有没有关于如何实现这一点的例子

更新

如果我将验证程序配置为:

<bean id="validatorFactory" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
<bean id="validator" factory-bean="validatorFactory"
      factory-method="getValidator" />


现在我可以看到验证是使用SpringBeans正确连接的。然而,现在我怀疑我是否在使用HibernateValidator(我想我不是)。是否有任何方法可以实现同样的效果,但要将HibernateValidator工厂配置为使用SpringBean?

我假设您的MyCustomValidator未被识别为托管SpringBean,因此不会发生自动连接


使MyCustomValidator成为Springbean的最简单方法是在类级别添加@Component注释。

我假设MyCustomValidator未被识别为托管Springbean,因此不会发生自动连接


使MyCustomValidator成为Springbean的最简单方法是在类级别添加@Component注释。

对于spring MVC,您可以使用InitBinder,其中您的自定义验证器将由RequestMappingHandlerAdapter自动调用。
只需在控制器中用@InitBinder注释您的方法,并在方法内部通过调用WebDataBinder.setValidator()提供您的验证器并将验证器类提供给WebDataBinder即可。

您可以在Spring MVC中使用InitBinder,其中您的自定义验证器将由RequestMappingHandlerAdapter自动调用。
只需在控制器中使用@InitBinder注释您的方法,并在方法内部通过调用WebDataBinder.setValidator()提供您的验证器,并将您的验证器类提供给WebDataBinder即可。

您检查过了吗?@Vincz777可能我没有抓住要点,但我没有看到在自定义验证器上使用任何依赖注入,我错了吗?在
MyCustomValidator
类上方添加
@Component
注释。Spring应该注入
MyCustomChecker
@AndreaGiuliano您找到问题的解决方案了吗?您检查过了吗?@Vincz777可能我没有抓住要点,但我没有看到在自定义验证器上使用任何依赖项注入,我错了吗?在
MyCustomValidator
类上方添加
@Component
注释。Spring应该注入
MyCustomChecker
@AndreaGiuliano您找到问题的解决方案了吗?谢谢您的评论。然而,我尝试添加@Component并使用带限定符的注入,但仍然无法工作。我是否也应该在CustomConstraint接口定义中以某种方式更改@Constraint(validatedBy=MyCustomValidator.class)?您是否确保spring对bean进行类路径扫描?是的,我也这样做,我的大多数bean都被定义到xml文件中。因此,我也尝试在其中定义它,而不是使用@Component注释,但仍然有“javax.validation.ValidationException:HV000064:无法实例化ConstraintValidator:”例外,有趣的是,我在XML中配置了验证器,然后一切都按预期进行,但是我怀疑我实际上不再使用HibernateEvalidator了:/谢谢你的评论。然而,我尝试添加@Component并使用带限定符的注入,但仍然无法工作。我是否也应该在CustomConstraint接口定义中以某种方式更改@Constraint(validatedBy=MyCustomValidator.class)?您是否确保spring对bean进行类路径扫描?是的,我也这样做,我的大多数bean都被定义到xml文件中。因此,我也尝试在其中定义它,而不是使用@Component注释,但仍然有“javax.validation.ValidationException:HV000064:无法实例化ConstraintValidator:”例外,有趣的是,我在XML中配置了验证器,然后一切都按预期进行,但是我怀疑我实际上不再使用HibernateEvalidator了:/