composite-build-usage-example
1package by.andd3dfx.templateapp.validators;
2
3import by.andd3dfx.templateapp.dto.ArticleUpdateDto;
4
5import javax.validation.ConstraintValidator;
6import javax.validation.ConstraintValidatorContext;
7import java.lang.reflect.Field;
8
9public class OnlyOneFieldModifiedValidator implements ConstraintValidator<OnlyOneFieldModified, ArticleUpdateDto> {
10
11@Override
12public boolean isValid(ArticleUpdateDto articleUpdateDto, ConstraintValidatorContext context) {
13int count = 0;
14ArticleUpdateDto.class.getDeclaredFields();
15for (Field field : ArticleUpdateDto.class.getDeclaredFields()) {
16try {
17final boolean isAccessible = field.canAccess(articleUpdateDto);
18field.setAccessible(true);
19final Object o = field.get(articleUpdateDto);
20if (o != null) {
21count++;
22}
23field.setAccessible(isAccessible);
24} catch (IllegalAccessException e) {
25e.printStackTrace();
26}
27}
28return count == 1;
29}
30}
31