Я хочу, чтобы пользователь отправлял числовое значение c для поля в запросе, поскольку пользователь также может вводить символ. Поскольку я не нашел никакого встроенного решения для проверки mvc весной, я решил создать свой собственный валидатор, чтобы проверить, является ли введенное значение числом или нет. Ниже приведен фрагмент кода.
Интерфейс ограничения:
@Documented
@Constraint(validatedBy = {IntegerValidator.class})
@Target({ METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
public @interface IntegerConstraint {
String message() default "Please enter numers only...!!!";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Класс валидатора:
public class IntegerValidator implements ConstraintValidator<IntegerConstraint, String> {
@Override
public void initialize(IntegerConstraint contactNumber) {
}
@Override
public boolean isValid(String reqParam, ConstraintValidatorContext cxt) {
return !StringUtils.isEmpty(reqParam) && reqParam.matches("^(0|[1-9][0-9]*)$");
}
}
Поле класса DTO:
@IntegerConstraint
@PositiveOrZero(message = "Sorting number either can be positive or zero...!!!")
private Integer sortOrd;
Контроллер :
public ModelAndView addDetail(@Valid @ModelAttribute("fooDetails") FooDTO footDTO,
BindingResult result, HttpServletRequest request)
Журнал ошибок:
javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'com.eps.customvalidator.IntegerConstraint' validating type 'java.lang.Integer'. Check configuration for 'sortOrd'
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getExceptionForNullValidator(ConstraintTree.java:108) ~[hibernate-validator-6.0.10.Final.jar:6.0.10.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getInitializedConstraintValidator(ConstraintTree.java:140) ~[hibernate-validator-6.0.10.Final.jar:6.0.10.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.SimpleConstraintTree.validateConstraints(SimpleConstraintTree.java:55) ~[hibernate-validator-6.0.10.Final.jar:6.0.10.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:73) ~[hibernate-validator-6.0.10.Final.jar:6.0.10.Final]