【发布时间】:2017-12-15 12:04:17
【问题描述】:
我无法在自定义验证器中注入实体存储库。 我对 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)
我错过了什么?
【问题讨论】:
标签: java validation spring-boot jhipster