- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些 UserService 对 User 实体进行操作。我创建了自己的注释和 ConstraintValidator 类作为实现
我需要将该 UserService 注入(inject)到 ConstraintValidator 中。并且,正如 spring 文档所说,注册 bean 后:
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
SpringConstraingValidatorFactory 默认情况下已注册,因此我可以轻松地将我的服务@Autowired 到其中。 (来源:http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/validation.html#validation-beanvalidation-spring-constraints)
不幸的是,它对我不起作用。我在字段上收到带有 NullPointerException 的堆栈跟踪(在实现 ConstraintValidator 的类内部):
@Autowired
private UserService userService; //here
并在调用服务时
@Override
public boolean isValid(String username, ConstraintValidatorContext constraintValidatorContext) {
personService.doSomethingWithService(); //here
return true;
}
这意味着 UserService 没有正确注入(inject)。我还尝试使用 ApplicationContextAware - 在我的 ConstraintValidator 类中实现它,获取上下文并找到 bean:
(UserService) context.getBean("userService");
但这也没有帮助..我不知道我的代码有什么问题。最后是堆栈跟踪,其中包含许多异常,包括 NullPointer 和 RollbackException。
java.lang.NullPointerException
com.reportme.model.validation.UsernameAvailableValidator.isValid(UsernameAvailableValidator.java:20)
com.reportme.model.validation.UsernameAvailableValidator.isValid(UsernameAvailableValidator.java:9)
org.hibernate.validator.internal.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:308)
org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:180)
org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:124)
org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:85)
org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:463)
//...
org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction
org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:526)
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:757)
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726)
//...
javax.persistence.RollbackException: Error while committing the transaction
org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:94)
org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:517)
如果有必要,我会使用 Spring 4,并且非常感谢您的帮助,谢谢!
最佳答案
我的环境是 spring-boot,下面带有 org.springframework.stereotype.Component
注释的验证类代码正在运行,FYR。
@Component
public class FooValidator implements ConstraintValidator<Foo, Object> {
@Autowired
MyService service;
@Override
public void initialize(Foo constraintAnnotation) {
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
return service.isValid(value);
}
}
关于spring - 如何将(@Autowired)@Service注入(inject)ConstraintValidator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31340066/
我在我的项目中使用 bean-validation,我想为现有的约束注释编写一个自定义验证器。 例如,我有一个表示名为 CustomDateTime 的日期/时间的类。 .在使用此类作为例如出生日期的
您能告诉我如何创建也适用于单个字段和集合的自定义约束 validator 吗? 例如,我有一个对象 Foo,其中包含状态枚举 public class Foo { Status status;
假设我有一个自定义 ConstraintValidator: public class FooValidator implements ConstraintValidator { @Overr
我已经阅读了一些关于如何使用 Hibernate 的 ConstrainValidator 的问答和指南(例如 Hibernate Documentation ),但没有一个明确提及如何在 a 的特定
如果您熟悉 Bean 验证框架,您就会知道无法获取方法参数的名称。因此,如果您对方法的第一个参数执行 @NotNull 约束并且验证失败,则 getPropertyPath 将类似于“arg1”。 我
我已经在测试中模拟了 EntityManager。 但现在我也需要在我的真实类中模拟 EntityManager(自定义约束注释的 validator )。 在测试中我这样做 @RunWith(Moc
是否可以在嵌套到 @interface 定义的 ConstraintValidator 中使用依赖注入(inject)? 我创建了需要验证一些数据的自定义注释。 CodebookValidator 只
由于应用程序的架构,我需要将约束注释与其实现分离。当未显式设置 validatedBy 属性时,我正在考虑使用 @Size 注释中使用的方法: @Target({ METHOD, FIELD, ANN
了解后Hibernate Custom Validators ,它让我对一个主题产生了兴趣,我是否可以创建一个基本注释,我可以在其中设置要使用的 validator ? @Target({ Eleme
现在我正在开发我的 spring+hibernate 应用程序。 我想覆盖 @Min 注释的 validator 并编写以下代码: @Component public class CustomMinV
我有一个简单的 validator 来验证一个字符串值是预定义列表的一部分: public class CoBoundedStringConstraints implements Constraint
在 ConstraintValidator 中使用依赖注入(inject)时,我遇到了意外的行为。正在类里面进行评估。 实体类: @Entity @ValidDemoEntity public cla
任何人都可以解释一下为什么 ConstraintValidator 类的 isValid() 方法被调用两次吗? 例如,这是我的示例代码: @POST @Path("/json/dog") @Prod
我有一些 UserService 对 User 实体进行操作。我创建了自己的注释和 ConstraintValidator 类作为实现 我需要将该 UserService 注入(inject)到 Co
我正在开发一项增强功能,以创建新的表 A 并将其 id 引用为现有表 B 中的新列 为了简洁起见,我省略了整个实体类。 import javax.validation.constraints.NotN
任何人都可以解释一下为什么 ConstraintValidator 类的 isValid() 方法被调用两次吗? 例如,这是我的示例代码: @POST @Path("/json/dog") @Prod
我需要创建一个自定义注释,当该注释应用于方法时,会根据各种检查检查并验证输入参数(原始和非原始)。如果检查失败应该直接返回错误消息。 在搜索时,我在创建自定义注释时遇到了 AbstractProces
我创建了一个 API 并添加了一个自定义注释来验证请求正文对象,但这从未被调用。下面是对象。请检查一下代码并帮我看看代码哪里需要更正? @NotNull,@Size 也不起作用 请求正文对象 @Get
场景是在持久化一个Log实体类之前,应该检查它的属性String description是否至少包含一个在IllegalWord中找到的词 实体类。下面是两个实体类的映射: // Log.java @
有没有办法从 ConstraintValidator.isValid 方法访问叶或根 bean?如果没有,有什么解决方法吗? 谢谢。 马科斯 最佳答案 不,没有,原因是调用Validator#vali
我是一名优秀的程序员,十分优秀!