已编辑
要验证子级电子邮件列表,可以创建自定义验证。
我编写了如下的自定义验证
1-创建名为ChildEmailValidation的注释
@Documented
@Constraint(validatedBy = ChildEmailValidator.class)
@Target( { ElementType.METHOD,ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface ChildEmailValidation {
String message() default "Duplicate Email";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
2-为ChildEmailValidation
创建验证器
在此部分中,您可以编写自定义业务进行验证。 (您可以编写算法)
public class ChildEmailValidator implements ConstraintValidator<ChildEmailValidation,List<Child>> {
@Override
public void initialize(ChildEmailValidation constraintAnnotation) {
}
@Override
public boolean isValid(List<Child> childList,ConstraintValidatorContext constraintValidatorContext) {
//Create empty mailList
List<String> mailList = new ArrayList<>();
//Iterate on childList
childList.forEach(child -> {
//Checks if the mailList has the child's email
if (mailList.contains(child.getMail())) {
//Found Duplicate email
throw new DuplicateEmailException();
}
//Add the child's email to mailList (If duplicate email is not found)
mailList.add(child.getMail());
});
//There is no duplicate email
return true;
}
}
3-在父亲班上添加@ChildEmailValidation
public class Father {
List<Child> child;
@ChildEmailValidation
public List<Child> getChild() {
return child;
}
public void setChild(List<Child> child) {
this.child = child;
}
}
4-将@Valid
放在控制器中的fatherDto
上
@RestController
@RequestMapping(value = "/test/",method = RequestMethod.POST)
public class TestController {
@RequestMapping(value = "/test")
public GenericResponse getFamily(@RequestBody @Valid Father fatherDto) {
// ...
}
}
,
您可以使用@UniqueElements
的Hibernate批注,您可以在this documentation上找到它,它基于某些元素的equals
。
@UniqueElements
private List<Child> childs;
本文链接:https://www.f2er.com/2696049.html