Sag*_*wal 1 java validation spring java-8
我正在处理 POJO 的 spring 和 spring 验证。
在 POJO 内部,我有一些字段,其值将映射到特定ENUM类。
正如下面的代码中提到的,我的 cardType 字段为CardType ENUM.
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.RequiredArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Max;
@Data
@SuperBuilder(toBuilder = true)
@RequiredArgsConstructor
@EqualsAndHashCode
class SamplePOJO {
    private String cardType;
    @Length(max = 20)
    private String name;
    @Max(10)
    private int number
}
public enum CardType {
VISA, MASTER;
}
对于姓名和号码我可以做@Max and @Length。我如何对属于提到的cardType应用验证enum。同样在将来,我可能List  还需要检查值。所以如果有人可以指导我。
一种方法是编写用于枚举验证的自定义注释。并在现场使用它
@EnumNamePattern
private CardType cardType;
自定义注释
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = EnumNamePatternValidator.class)
public @interface EnumNamePattern {
    String message() default "invalid";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
自定义注释验证器
public class EnumNamePatternValidator implements ConstraintValidator<EnumNamePattern, String> {
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (value == null) return true; 
        return Arrays.stream(CardType.values()).anyMatch(e -> e.name().equals(value));
    }
}
| 归档时间: | 
 | 
| 查看次数: | 3172 次 | 
| 最近记录: |