2013-08-26 3 views
0

Я должен поместить различные проверки для разных этапов. Например: У меня есть класс ученика с этими атрибутами public class Student { integer id, integer rollNumber; Название строки; целого возраст, Строка fathersName, Строка mothersName }Как сделать пользовательские аннотации для валидации весной

Я должен проверить объект перед сохранением в базе данных на различных условиях: 1. Если сохранить для стадии проекта, то только идентификатор и rollnumber должны быть обязательными, 2. Если сохранить для стадии отправки, все поля должны быть обязательными.

Есть ли способ написать аннотации, где я могу определить эти проверки с помощью @draft и @submit в соответствии с аннотациями. Например, @valid (тип = проект)

ответ

1

Здесь вы идете .. Это не очень жестко .. Я поделюсь вам код для проверки строки является действительным IP-адрес:

Вы должны написать аннотации для проверки правильности и вам нужно написать конкретную реализацию Validator:

Ниже приведен класс аннотаций для проверки подлинности, которые можно использовать на конкретном поле, которое вы хотите проверить:

@Target({ FIELD}) 
@Retention(RUNTIME) 
@Constraint(validatedBy = InetAddressValidator.class) 
@Documented 

public @interface ValidIP { 

    String message() default "{ValidIP.message}"; 
    Class<?>[] groups() default {}; 
    Class<? extends Payload>[] payload() default {}; 

} 

Теперь вам нужно написать конкретную реализацию валидатора a S ниже:

public class InetAddressValidator implements ConstraintValidator<ValidIP, String> { 

private static final Pattern IPV4_PATTERN = 
Pattern.compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."); 
public boolean isValid(String value, ConstraintValidatorContext context) { 

    if (!(CommonUtility.isNullOrEmpty(value) || IPV4_PATTERN.matcher(value).matches()))  
    { 
    return false; 
    } 

    return true; 
} 

public void initialize(ValidIP parameters) { 

} 

} 

Вы можете включить эту аннотацию на поле, как:

@ValidIP(message = "Enter a valid IP address") 
private String ip; 

Не это будет работать во время связывания, когда пружина пытается отобразить параметры формы в бобе.

Чтобы указать на это, метод isValid - это тот, который должен иметь логику для проверки действительности.

Метод инициализации - это тот, который используется для выполнения любой инициализации до вызова isValid.

Попробуйте это, и если вам по-прежнему нужна помощь по настроенному вопросу, дайте мне знать, что у меня может быть время написать его для вас.

+0

добро пожаловать – dharam

+0

Мне нужно проверить объект на уровне контроллера. Как и на контроллере, вы пишете аннотацию «@valid» для проверки объекта. Я хочу настроить «@valid» аннотацию si, что если я дам «@valid» (type = 'draft') в контроллере, тогда он должен проверять только число и номер рулона, и если я дам «@valid» (type = 'save '), то он должен проверять атрибуты ученика. – user1183194

+0

Затем вы поместили группу Draft (в основном пустой класс маркера под названием Draft) на номер рулона и аннотацию проверки идентификатора, а также всю группу во всех аннотациях проверки и проверили с помощью специальной аннотации проверки подлинности Spring, которая поддерживает группы - @Validated (Draft.class) –

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