Spring проверка с помощью словаря

Использование Spring RestControllers с валидатором спящего режима.

Необходимо создать некоторую аннотацию проверки, которая проверяет поле проверки в каком-либо словаре (заданный массив или некоторый БД).

Например, у меня есть bean

@Service
public class MyDict {

   public boolean containsWord(String word) {
       ...
   }
} 

И некоторые данные, я проверяю

public class ResponseData {

    @IsInDictionary(MyDict.class)
    private String word;

}

И когда я вызываю hibernate validation напрямую или с помощью @Valid аннотации в методе RequestMapping, я хочу, чтобы валидатор вызывал метод MyDict bean containsWord (word).

Есть ли у кого-нибудь идеи?

Ответ 1

Вам нужно определить свою собственную аннотацию, а затем определить свой собственный Validator, где вы будете выполнять свою логику проверки (в этом случае поиск по словарю)

Подробнее об этом можно прочитать здесь: https://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/validator-customconstraints.html#validator-customconstraints-constraintannotation

Создав собственную аннотацию, вы просто расширяете ConstraintValidator<YourCustomAnnotation, String>, и вы в значительной степени готовы к работе. Метод isValid() должен выполнять внутри указанной вами логики: containsWord(word)

Хорошо, что ваш пользовательский валидатор может быть Spring -managed bean, чтобы вы могли свободно вводить в него материал и, например, выполнять поиск в БД. Поэтому в этом случае вам нужно будет ввести словари и выполнить там чек.