java—如何仅在SpringMVC中填充内容时进行验证?

3qpi33ja  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(294)

我有一个有几个属性的类。一个是月,另一个是年。不必填写这些字段。两个都留空是可以接受的。但如果只填写了其中一个,则应验证这两个日期(根据下面的@min和@max),使其成为有效的月/年日期。我如何实现这个条件?下面的代码强制填写这两个。不接受第一个条件(都为空)。

@Entity
public class Person implements Serializable{

    private static final long serialVersionUID = 1L;

    //Other attributes here

    @Min(value=1, message="Invalid month")
    @Max(value=12, message="Invalid month")
    private int month;

    @Min(value=1900, message="Invalid year")
    @Max(value=2100, message="Invalid year")
    private int year;
zu0ti5jz

zu0ti5jz1#

JSR-303 解决这个问题。您可以创建自定义验证程序注解 @ValidMonthAndYearPerson.java .
有效月份和年份.java

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(
    validatedBy = {MonthAndYearValidator.class}
)
public @interface ValidMonthAndYear {
    String message() default "Missing Month or Year";

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

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

monthandyearvalidator.java版本

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class MonthAndYearValidator implements ConstraintValidator<ValidMonthAndYear, Person> {

    public boolean isValid(Person person, ConstraintValidatorContext context) {
        boolean isValid = false;
        //Logic here to validate Person attributes
        return isValid;
    }
}

相关问题