@NotZero Аннотация для длинной переменной типа в Java Springboot - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь создать аннотацию @NotZero для переменных типа long & float. Это должно работать как @NotBlank для строк с ненулевыми ограничениями.

Я пробовал аннотации @Min и @Numeric, но их недостаточно для моих требований. Regex, кажется, не поможет в этом случае, не будучи строкой. Как я могу добавить пользовательскую функцию, которая проверяет, является ли входной номер не ноль, и использовать его в качестве аннотации.

Мое число может принимать значения, такие как 0,001, 25, 36,25 и т. Д., Любые строго положительные значения long & float.

1 Ответ

0 голосов
/ 17 сентября 2018

Если вы используете Hibernate, рассмотрите пользовательский валидатор: https://www.baeldung.com/spring-mvc-custom-validator

Определение аннотации:

@Documented
@Constraint(validatedBy = NonZeroFloatValidator.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface NonZeroFloatConstraint {
    String message() default "Float value is zero";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

Логика валидатора:

public class NonZeroFloatValidator implements ConstraintValidator<NonZeroFloatConstraint, Float>
{    
    @Override
    public void initialize(NonZeroFloatConstraint cons) {}

    @Override
    public boolean isValid(Float f, ConstraintValidatorContext cxt)
    {
        return Float.compare(f, 0.0f) != 0;
    }
}

Для двойников вам понадобится другое ограничение, но шаблон тот же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...