Вы можете использовать группы проверки, чтобы определить, какие ограничения должны проверяться, а какие - нет.Я предполагаю, что когда вызывается createEntity
, вы не хотите применять @NotNull
и другие проверки.Вместо этого вы хотите, чтобы выполнялся какой-то другой пользовательский код проверки ...
Определите свои проверки в ограничении на уровне класса .
@Data
public class Person {
@NotEmpty
@Size(min = 10)
@Pattern(regexp = "[0-9]*")
private String name;
}
Пользовательском ограничении на уровне класса
@Target({ ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { PersonValidator.class })
@Documented
public @interface ValidPerson {
String message() default "Invalid person";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Валидатор для пользовательского ограничения, определенного выше, который только проверяет, что имя не является нулевым.Проверки размера и регулярных выражений не применяются.
public class PersonValidator implements ConstraintValidator<ValidPerson, Person> {
@Override
public boolean isValid(Person person, ConstraintValidatorContext context) {
// Add your validation code here
if (person == null) {
return true;
}
return person.getName() != null;
}
}
Создайте пользовательскую группу и подтвердите свой параметр, используя эту группу.Поскольку ваши регулярные проверки не являются частью этой группы, эти ограничения не будут подтверждены.
public interface CustomPersonGroup {
}
@Service
@Validated
public class SomeService {
public void test(@Validated(value = CustomPersonGroup.class) @ValidPerson Person person) {
}
}
Если проверки, которые вы хотите выполнить, могут быть выражены в виде стандартных аннотаций проверки компонентов, вы можете сделать следующее.
@Data
public class Person {
@NotEmpty(groups = CustomPersonGroup.class)
@Size(min = 10)
@Pattern(regexp = "[0-9]*")
private String name;
}