如何解决带有自动装配存储库的 Hibernate/Spring 自定义验证
我正在构建自定义约束验证器,并不断收到 HV000028: Unexpected exception during isValid call.]
奇怪的部分是 findById
方法返回并在控制台上打印正确的数据,但出现上述错误。我怎样才能让它没有错误?
@CrossOrigin(origins = "*",maxAge = 3600)
@RestController
@Validated
public class invitecontroller {
@PostMapping("/v1/invite")
public void invite(@Valid @RequestBody invite invite){
}
}
@inviteconstraints
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class invite {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long inviteid;
private String type;
private Long propertyid;
private Date moveindate;
@OnetoMany(cascade = CascadeType.ALL)
@JoinColumn(name = "inviteid")
private List<applicant> applicants;
}
public class inviteconstraint implements ConstraintValidator<inviteconstraints,invite> {
@Autowired propertyrepository propertyrepository;
@Override
public boolean isValid(invite invite,ConstraintValidatorContext context) {
property property = propertyrepository.findById(1L).get();
^^^ **Error Happens Here** ^^^
return true;
}
@Override
public void initialize(inviteconstraints constraintannotation) {
}
}
@Target( { ElementType.TYPE } )
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = inviteconstraint.class)
public @interface inviteconstraints {
public String message() default "Validator Failed";
public Class<?>[] groups() default {};
public Class<? extends Payload>[] payload() default {};
}
解决方法
自动装配在这种情况下不起作用,因此您在此 (propertyRepository) 点收到错误。 为了使自动装配工作,您需要进行其他配置。使用它后,自动装配将成功发生。
@Component
public class HibernateValidatorCustomizer implements HibernatePropertiesCustomizer {
private final ObjectProvider<Validator> provider;
public HibernateValidatorCustomizer(ObjectProvider<Validator> provider) {
this.provider = provider;
}
public void customize(Map<String,Object> hibernateProperties) {
Validator validator = provider.getIfUnique();
if (validator != null) {
hibernateProperties.put("javax.persistence.validation.factory",validator);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。