0

특정 형식이어야하는 문자열 목록이 있습니다. 형식이 지정되지 않은 문자열을 사용하여 오류 메시지를 반환해야합니다. 스프링 밸리데이션을 사용하는 방법 (최대 절전 유효성 검사기를 사용하고 있습니다). 주석 :스프링 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; 
      } 
     } 

    } 

} 

사용법 : 전체 목록을 제공합니다 validatedValue를 사용

public class Test { 

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

} 

.

답변

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; 
      } 
     } 
    } 
} 
관련 문제