Spring 验证注释 - 如何验证字符串中的 2 个字符条目是否为实际的美国州?

Spring validation annotation - How can I verify that a 2 character entry into a string is an actual US state?

我正在尝试使用 spring 检查用户的在线输入,以确保他们输入的两个字符是实际的美国州,有没有办法做到这一点,希望使用预设模式?像 @State 之类的(如果这是一个合法的注解)。另外,是否有一个好的注释通常用于 String street 和 String city 字段?那不是@NotNull 和@NotEmpty

如有任何帮助,我们将不胜感激!

不幸的是,没有开箱即用的方法,但是您可以创建自己的 @State 注释,您只需定义注释并 class 实施 ConstraintValidator(处理验证逻辑),例如

@Constraint(validatedBy = StateConstraintValidator.class)
@Target( { ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface State {

    String message() default "{State}";

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

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


public class StateConstraintValidator implements ConstraintValidator<String, String> {

    private static final Set<String> CODE_MAP = new HashSet<>(){
      {add("AR");}
      {add("AK");} //add more codes ...
    };

    @Override
    public void initialize(String state) { }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext cxt) {
        if(value == null) {
            return false;
        }
        return CODE_MAP.contains(value);
    }
}

您可以用类似的方式创建其他注释。