Java 验证器中的依赖注入

Java 验证器中的依赖注入,java,validation,spring-boot,jhipster,Java,Validation,Spring Boot,Jhipster,我无法在自定义验证器中注入实体存储库。 我对java、spring和jHipster还很陌生,所以我对类似问题的答案有点迷茫 我所拥有的: 实体: @Entity @Table(name = "building_floor",uniqueConstraints = @UniqueConstraint(name="buildingFloor",columnNames = {"building_id","name"})) @Cache(usage = CacheConcurrencyStrategy

我无法在自定义验证器中注入实体存储库。 我对java、spring和jHipster还很陌生,所以我对类似问题的答案有点迷茫

我所拥有的:

实体:

@Entity
@Table(name = "building_floor",uniqueConstraints = @UniqueConstraint(name="buildingFloor",columnNames = {"building_id","name"}))
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@BuildingFloorUnicityValidator
public class BuildingFloor implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    @Size(max = 32)
    @Column(name = "name", length = 32, nullable = false)
    private String name;

    @ManyToOne
    @NotNull
    private Building building;
    //...
自定义注释:

@Documented
@Constraint(validatedBy = BuildingFloorUnicityValidatorCheck.class)
@Target({ ElementType.TYPE, ANNOTATION_TYPE })
@Retention(RUNTIME)
public @interface BuildingFloorUnicityValidator {

    String message() default "{builindg floor already exists}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
    String value() default "";
}

我缺少什么?

@Autowired
不能由Spring解释,因为
buildingFloorRunicityValidatorCheck
不是Springbean,您必须使用
@Service
@Component
对其进行注释,或者从
@Configuration
注释类对其进行实例化


顺便说一下,JHipster和Spring更喜欢构造函数注入而不是字段注入(您使用的)。JHipster中的所有服务都使用这种方式,因此您可以在您的项目中找到许多示例。

我尝试了这种方式,但它不适用于
@Service
注释它在
@Autowired
方式中仍然为空,并在构造函数方式中触发错误<代码>javax.validation.ValidationException:HV000064:无法实例化ConstraintValidator:类eu.***.master_data.validator.location.LocationBuildingIntegrityValidatorCheck。位于org.hibernate.validator.internal.util.privilegedactions.NewInstance.run(NewInstance.java:42)它与原始示例中的验证器不同,但它的结构相同。
public class BuildingFloorUnicityValidatorCheck implements ConstraintValidator<BuildingFloorUnicityValidator, BuildingFloor> {

    @Autowired
    private BuildingFloorRepository buildingFloorRepository;



    @Override
    public void initialize(BuildingFloorUnicityValidator constraintAnnotation) {

    }

    @Override
    public boolean isValid(BuildingFloor value, ConstraintValidatorContext context) {
        BuildingFloor existingBuilindg = buildingFloorRepository.findOneByBuildingAndName(value.getBuilding(),value.getName());

        return existingBuilindg == null;
    }
}
@PostMapping("/building-floors")
    @Timed
    public ResponseEntity<BuildingFloorDTO> createBuildingFloor(@Valid @RequestBody BuildingFloorDTO buildingFloorDTO)
Caused by: java.lang.NullPointerException: null
    at eu.***.master_data.validator.unicity.BuildingFloorUnicityValidatorCheck.isValid(BuildingFloorUnicityValidatorCheck.java:31)