0

私は、特定のフォーマットでなければならない文字列のリストを持っています。私は、指定された形式ではない文字列でエラーメッセージを返す必要があります。どのように春の検証でこれを行う(私は、休止状態のバリデータを使用しています)。 注釈:Spring MVC無効な値をリストして報告するための検証

@Documented 
@Retention(RUNTIME) 
@Target({FIELD, METHOD}) 
@Constraint(validatedBy = HostsValidator.class) 
public @interface HostsConstraint { 
    String message(); 

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

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

実装:

public class HostsValidator implements ConstraintValidator<HostsConstraint, List<String>>{ 

    @Override 
    public void initialize(OriginHostsConstraint constraintAnnotation) { 

    } 

    @Override 
    public boolean isValid(List<String> strings, ConstraintValidatorContext context) { 
     for (String s : strings) { 
      if (!s.matches("[0-9]+") { 
       //How do I say: Invalid string <s> ? 
       return false; 
      } 
     } 

    } 

} 

用法:

public class Test { 

    @HostsConstraint(message="Invalid string ") 
    private List<String> hosts; 

} 

validatedValueを使用すると、全体のリストが表示されます。

答えて

0

使用JSR 380の検証は、それがコンテナ要素の制約することができます。

ここにコンテナエレメントセクションへのリンクがあります。Hibernate Validator 6.0.6.FINAL Document

0

私は解決策を見つけたと思うが、それはハイバネートバリデーターに結合されている。それはハックな実装さえあるかもしれません。

用法:

public class Test { 

    @HostsConstraint(message="Invalid string : ${invalidStr}") 
    private List<String> hosts; 

} 

実装

public class HostsValidator implements ConstraintValidator<HostsConstraint, List<String>>{ 

    @Override 
    public void initialize(OriginHostsConstraint constraintAnnotation) {} 

    @Override 
    public boolean isValid(List<String> strings, ConstraintValidatorContext context) { 
     for (String s : strings) { 
      if (!s.matches("[0-9]+") { 
       ConstraintValidatorContextImpl contextImpl = 
        (ConstraintValidatorContextImpl) context 
         .unwrap(HibernateConstraintValidatorContext.class); 
       contextImpl.addExpressionVariable("invalidStr", s); 
       return false; 
      } 
     } 
    } 
} 
関連する問題