我对Spring是完全陌生的,对于所问的问题,我已经在SO上寻找了一些答案。以下是链接:
Spring 3.1 Autowiring不能在自定义约束验证器中工作
@Bean
public Validator validator() {
return new LocalValidatorFactoryBean().getValidator();
}
@Autowired
Validator validator;
它采用了Spring的验证器实现,而不是Hibernate的验证器。我不知道如何准确地注入Hibernate验证器,并简单地在其他类之间自动调用它,所以我使用了一个廉价的技巧,现在我的Java配置如下所示
@Bean
public Validator validator() {
// ValidatorImpl is Hibernate's implementation of the Validator
return new ValidatorImpl();
}
(如果有人能告诉我如何避免以这种讨厌的方式获得Hibernate验证器,我将非常感谢)
但让我们来看看这里的主要问题:
@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() default {};
}
public class EmployeeValidator implements ConstraintValidator<EmployeeValidation , Object> {
@Autowired
private EmployeeService employeeService;
@Override
public void initialize(EmployeeValidation constraintAnnotation) {
//do Something
}
@Override
public boolean isValid(String type, ConstraintValidatorContext context) {
return false;
}
}
现在我被一个非常讨厌的变通方法困住了,我不想继续使用这样的代码。有人能帮我解决我的情况吗。
附言。这些是我在Java配置文件中的导入:
import org.hibernate.validator.HibernateValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.core.env.Environment;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
我希望解决方案能帮助某人:
@Bean
public Validator validator () {
ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
.configure().constraintValidatorFactory(new SpringConstraintValidatorFactory(autowireCapableBeanFactory))
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
return validator;
}
使用SpringConstraintValidatorFactory
初始化验证器,以便注入工作,并将验证器实现提供为hibernate.class工作方式如下:
Validator validator(final AutowireCapableBeanFactory autowireCapableBeanFactory) {
或者在配置文件中为它添加getter和setter,如下所示:
public AutowireCapableBeanFactory getAutowireCapableBeanFactory() {
return autowireCapableBeanFactory;
}
public void setAutowireCapableBeanFactory(AutowireCapableBeanFactory autowireCapableBeanFactory) {
this.autowireCapableBeanFactory = autowireCapableBeanFactory;
}
问题内容: 我对Spring完全陌生,因此已经针对所问问题在SO上找到了一些答案。这里是链接: 我有一个Spring项目,我想在其中使用Hibernate Validator进行对象验证。根据我在网上阅读的内容和一些论坛,我尝试注入验证器,如下所示: 但是无论我在哪里使用 它采用了Spring的验证器实现,而不是Hibernate的验证器。我不知道如何准确地注入Hibernate验证程序,并简单地
我有一个基于Spring的WebApp。我在控制器中使用了几个带有注释@repository和@transactional的存储库类。那部分工作得很好。 我创建了一个自定义约束验证器,它必须访问存储库。现在我不明白为什么存储库是空的。我尝试用@component注释来注释验证器。包含所有这些类的基本包位于XML部分。那么,我还应该做些什么来确保存储库依赖项注入的工作。这就是我的约束验证器的样子。
我已经搜索并找到了很多关于这个问题的话题,但无论出于什么原因,解决方案都不能解决我的问题。 我运行的是Spring boot 1.5.8和Hibernate。 我创建了一个自定义验证注释,以检查电子邮件与数据库相比是否唯一。注释使用查询数据库,以检查数据库中是否已存在电子邮件。我一直得到一个异常,bean为空。 我的理论是使用了hibernate验证器,而不是< code > UniqueEmai
问题内容: 我有一个基于Spring的webapp。我在控制器中使用了几个带有注解@ Repository,@ Transactional的存储库类。那部分工作正常。 我创建了一个自定义约束验证器,它必须访问存储库。现在,我不明白为什么存储库为空。我尝试使用@Component注释对验证器进行注释。包含所有这些类的基本程序包位于xml的一部分中。因此,我还应该采取其他措施来确保存储库依赖项注入正常
我在项目中使用bean验证,我想为现有的约束注释编写一个自定义验证器。 例如,我有一个类,它表示一个名为CustomDateTime的日期/时间。在使用此类作为例如出生日期的类中,我想用过去的日期对字段进行注释: 然后,我通过实现ConstraintValidator创建一个自定义验证器 我知道您通常会创建这样的单独注释: 但对我来说,这似乎是双重代码;-) 如何注册要与一起使用的自定义验证器?
我有一个像下面这样的模型对象,带有自定义约束验证器。自定义验证器检查是否填充了fileName或小时。 有一种方法将此作为输入,它验证所有以下条件 > 条件不为空(通过默认验证器) criteria.id不为空(通过默认验证器) criteria.name不为空(通过默认验证器) 标准文件名或小时不为空(通过自定义验证器) 空评估(@NotNull@有效标准标准){} 现在,当我为这个模型类编写单