Рассмотрим следующую ссылку для справки:
public class User{
private String username;
private String firstName;
private String middleName;
private String lastName;
private String phone;
//getters and setters
}
Мое приложение представляет собой API REST, основанный на принципе spring -boot, который предоставляет две конечные точки, один для создания пользователя, а другой - для пользователя.
"Пользователи" попадают в определенные категории, group-a, group-b и т.д., которые я получаю из заголовков почтового запроса.
Мне нужно проверить данные пользователя во время выполнения, и проверки могут отличаться в зависимости от группы пользователей.
например, пользователи, которые попадают в группу-a, могут иметь номера телефонов в качестве необязательного поля, тогда как это может быть обязательное поле для какой-либо другой группы.
Регулярное выражение также может меняться в зависимости от их групп.
Мне нужно настроить spring, чтобы как-то динамически проверить мое pojo, как только они будут созданы, и их соответствующий набор проверок запускается на основе их групп.
Может быть, я могу создать конфигурацию yml/xml, которая позволила бы мне включить это?
Я бы предпочел не комментировать мои private String phone
с помощью @NotNull
и @Pattern
.
Моя конфигурация выглядит следующим образом:
public class NotNullValidator implements Validator {
private String group;
private Object target;
public String getGroup() {
return group;
}
public void setGroup(String group) {
this.group = group;
}
public Object getTarget() {
return target;
}
public void setTarget(Object target) {
this.target = target;
}
@Override
public void validate(Object o) {
if (Objects.nonNull(o)) {
throw new RuntimeException("Target is null");
}
}
}
public interface Validator {
void validate(Object o);
}
@ConfigurationProperties(prefix = "not-null")
@Component
public class NotNullValidators {
List<NotNullValidator> validators;
public List<NotNullValidator> getValidators() {
return validators;
}
public void setValidators(List<NotNullValidator> validators) {
this.validators = validators;
}
}
application.yml
not-null:
validators:
-
group: group-a
target: user.username
-
group: group-b
target: user.phone
Я хочу настроить мое приложение так, чтобы позволить валидаторам выбирать свои цели (фактические объекты, не строки, упомянутые в yml), и вызывать их соответствующие public void validate(Object o)
для своих целей.
P.S.
Пожалуйста, не стесняйтесь редактировать вопрос, чтобы сделать его лучше.
Я использую jackson для сериализации и десериализации JSON.