0
カスタムバリデーターにエンティティリポジトリを挿入できません。 私は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 "";
}
バリ:
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)
私が起動するときにバリでのリポジトリは、私が何をしないのですNullPointerExceptionが
Caused by: java.lang.NullPointerException: null
at eu.***.master_data.validator.unicity.BuildingFloorUnicityValidatorCheck.isValid(BuildingFloorUnicityValidatorCheck.java:31)
をスローテスト? BuildingFloorUnicityValidatorCheck
は、春の豆ではありません、あなたが@Service
か@Component
とそれに注釈を付けたり@Configuration
注釈付きクラスから、それをインスタンス化する必要がありますので、
私はそれを試みましたが、 '@Service'アノテーションでは機能しませんでした。コンストラクタの方法で' @ Autowired'の方法とトリガエラーでまだヌルです。 'javax.validation.ValidationException:HV000064:ConstraintValidatorをインスタンス化できません:class eu。***。master_data.validator.location.LocationBuildingIntegrityValidatorCheck。 \t at org.hibernate.validator.internal.util.privilegedactions.NewInstance.run(NewInstance.java:42)... ' – jona303
これは、元のexempleと同じバリデータではありませんが、同じ構造です。 – jona303