长型Java Bean验证

问题描述

当长变量带有空值时,我找不到一种验证方法。我必须验证BigDecimal和long变量,对于BigDecimal,我的自定义注释可以正常工作,但对于long类型则不起作用。我正在使用Number类包装传入的类型并验证值。

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NotNullNumberValidator.class)
@Documented
public @interface NotNullNumber {

    String message() default "";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

}

我的NotNullNumberValidator

class NotNullNumberValidator implements ConstraintValidator<NotNullNumber,Number> {

    @Override
    public boolean isValid(Number value,ConstraintValidatorContext context) {
        return value != null;
    }
}

注释的使用

@NotNullNumber(message = "message for BigDecimal validation")
private BigDecimal subtotal; //works fine

@NotNullNumber(message = "message for long validation")
private long fechaPago;// not working}

我是严格的方式还是另外一种方式? @NotNull注释无法完成任务。

编辑:我正在使用@RequestBody进行此验证,我想验证请求正文中是否存在JSON字段(长)fechaPago。 我知道使用包装器类Long可以,但是我不能更改变量类型(规则是这里的规则)。

解决方法

我看到您使用的是不带null值的原始long,如果将其转换为包装器,验证器应该可以正常工作