0

Ich habe eine Liste von Zeichenfolgen, die von einem bestimmten Format sein sollten. Ich muss die Fehlermeldung mit den Strings zurückgeben, die nicht das angegebene Format haben. Wie man dies mit der Federvalidierung macht (Ich benutze den Hibernate Validator). Die Anmerkung:Spring MVC Validierung für die Liste und melden den ungültigen Wert

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

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

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

Die Umsetzung:

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; 
      } 
     } 

    } 

} 

Die Nutzung:

public class Test { 

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

} 

validatedValue Verwendung wird die gesamte Liste geben.

Antwort

0

Ich denke, ich habe eine Lösung gefunden, aber es ist an Hibernate Validator gekoppelt. Vielleicht ist es sogar eine Hacky-Implementierung.

Die Nutzung:

public class Test { 

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

} 

Die Umsetzung

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; 
      } 
     } 
    } 
} 
Verwandte Themen