我正在尝试为我的 Java/Spring Boot REST API 构建一个 ConstraintValidator。
问题是:我必须将一个国家和一个州/省保存到数据库中,但一个国家不能有两个同名的州/省。
所以我设置了我的域类:State.class,带有来自 javax.persistence 的 @UniqueConstraint,当对象到达我的数据库时它工作得很好,但是我想让它更安全并构建这个 ConstraintValidator 来为我的请求 DTO 做同样的事情,我称之为 StateRequestDto.class。
由于我喜欢尝试使东西通用化,因此我正在尝试构建一个通用的多重约束验证器,例如,您在 DTO 类上使用,传递您希望唯一的参数组合并使用实现 ConstraintValidator 的类,构建一个 JPQL查询注解上的参数组合是否已经存在。
这是我的 StateRequestDto.class
@UniqueCombo(combo = {"idCountry", "name"})
public class StateRequestDto {
@Unique(fieldName = "name", clazz = "State")
private String name;
@ExistsId(entityName = "Country")
private Integer idCountry;
public StateRequestDto (String name, Integer idCountry) {
this.name = name;
this.idCountry = idCountry;
}
public State convert(Country country) {
return new State(name, country);
}
public Object getIdCountry() {
return this.idCountry;
}
public String getName() {
return this.name;
}
}
还有我的 UniqueCombo 注释:
@Target({TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = UniqueComboValidator.class)
public @interface UniqueCombo {
String message() default "Testing...";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String[] combo();
}