2013-07-05 3 views
0
  1. Я хочу проверить строку для точного соответствия в проверке бобов. Должен ли я использовать @Pattern или есть ли другой способ сделать это?
  2. Если @Pattern - это путь, что такое regex?
  3. Могу ли я использовать две аннотации @Pattern для двух разных групп в одном поле?

ответ

4

Я хочу проверить строку для точного соответствия в проверке бобов. Должен ли я использовать @Pattern или есть другой способ сделать это?

Вы можете либо использовать @Pattern или реализовать пользовательское ограничение очень легко:

@Documented 
@Constraint(validatedBy = MatchesValidator.class) 
@Target({ METHOD, CONSTRUCTOR, PARAMETER, FIELD }) 
@Retention(RUNTIME) 
public @interface Matches { 
    String message() default "com.example.Matches.message"; 
    Class<?>[] groups() default {}; 
    Class<? extends Payload>[] payload() default {}; 
    String value(); 
} 

С валидатора, как это:

public class MatchesValidator implements ConstraintValidator<Matches, String> { 

    private String comparison; 

    @Override 
    public void initialize(Matches constraint) { 
     this.comparison = constraint.value(); 
    } 

    @Override 
    public boolean isValid(
     String value, 
     ConstraintValidatorContext constraintValidatorContext) { 

     return value == null || comparison.equals(value); 
    } 
} 

Если @Pattern является путь, что regex?

В принципе, только строка, которую вы хотите сопоставить, вам нужно только избежать специальных символов, таких как [\^$. |? * +(). См. this reference для получения более подробной информации.

Могу ли я использовать две аннотации @Pattern для двух разных групп в одном поле?

Да, просто использовать в @Pattern.List аннотацию:

@Pattern.List({ 
    @Pattern(regex = "foo", groups = Group1.class), 
    @Pattern(regex = "bar", groups = Group2.class) 
}) 
+0

Можете ли вы обновить RegEx для точного соответствия строки? –

+1

. '@Pattern (regex =" foo ")' или '@Pattern (regex =" really \\? ")' – Gunnar

+0

Спасибо, Mate! Что помогает! –

Смежные вопросы