Это происходит из-за ошибки в вашем классе EnumValidatorImpl.
Следующая строка
!valueList.contains(String.valueOf(value));
Фактическое значение valueList: [IMMEDIATE, SCHEDULED]
и значение: 8 от полезной нагрузки кузова {"deliveryMethod": 8}
Таким образом, проверка всегда будет неудачной.
Также !valueList.contains
это будет допустимо для не перечисляемых значений,
если вам нужно проверить только для перечисленных значений, удалите символ !
.
* Решения 1014 *
1. Принять как строку из запроса как
{
"deliveryMethod": "IMMEDIATE"
}
or
{
"deliveryMethod": "SCHEDULED"
}
Следовательно, необходимо обновить DTO, теперь значение является одним из перечисления / нет и проверяется
- Создать valueList как
[1, 2]
и проверить.
Здесь обновляется EnumValidatorImpl.java
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class EnumValidatorImpl implements ConstraintValidator<EnumValidator, Integer> {
List<Integer> valueList = null;
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
return valueList.contains(value);
}
@Override
public void initialize(EnumValidator constraintAnnotation) {
valueList = new ArrayList<>();
Class<? extends Enum<?>> enumClass = constraintAnnotation.enumClass();
Enum[] enumValArr = enumClass.getEnumConstants();
valueList = Arrays.stream(enumValArr)
.map(anEnum -> ((DeliveryMethodEnum) anEnum).deliveryMethod)
.collect(Collectors.toList()); // This will make problem, since it will only be used for DeliveryMethodEnum enum type and not for any other enum, if it is not the problem then this can be done,else I could not think of any other way
}
}