Предоставьте пользовательскую проверку для некоторых свойств (карт) компонента, поступающего из библиотеки/jar

#java #bean-validation #hibernate-validator #spring-validator

Вопрос:

Я создаю библиотеку, и у меня есть POJO, как в примере ниже. В POJO есть несколько карт, позволяющих клиентам передавать пользовательские свойства, которые они могут использовать на стороне сервера. Я хотел бы добавить ограничения проверки для известных полей и предоставить клиентам возможность добавлять проверку для полей на картах.

Я могу проверить POJO с помощью валидатора hibernate bean. Я ищу способы обеспечения проверки карт таким образом, чтобы клиенты могли их переопределить. Я просматривал документацию по гибернации, но она мне не очень понятна.

При использовании этой библиотеки (обычно в приложении spring) каждое развертывание может отправлять свои собственные пары значений ключей для каждой карты. Я могу позволить им зарегистрировать свой собственный валидатор для каждой карты в своем приложении, или я могу запустить его через какой-нибудь файл конфигурации, где они могут перечислить список возможных ключей и значений для каждой карты. Клиенты могут знать POJO, которое они хотят использовать для каждой карты, если это может привести к более чистому решению.

Карта может содержать в основном примитивные типы данных (например, строковые, логические, целочисленные и т. Д.). В идеале я хотел бы также поддерживать пользовательские объекты. Любые указания будут оценены по достоинству.

 class Example {
    private One one;
    private Two two;
}

class One {
    private Eleven eleven;
    private Twelve twelve;
}

private Eleven {
    private Map<String, Object> attributes = new HashMap<String, Object>(); 
}

private Twelve {
    @NotBlank(message = "id should not be blank")
    private String id;
    @Min(value = 0, message = "Count should not be less than 0")
    private int count;
    
    private Map<String, Object> attributes = new HashMap<String, Object>();     
}

private Two {
    @NotBlank(message = "id should not be blank")
    private String id;
    
    @Email(message = "Email should be valid")
    private String email;
}
 

Комментарии:

1. Чего именно вы пытаетесь достичь? Вы хотите, чтобы сами карты были проверены (например, чтобы они не были пустыми или содержали не более 5 отображений)? Вы хотите, чтобы ключи были проверены (например, каждый ключ является допустимым идентификатором Java)? Значения (например, все они являются будущими датами)? Сочетание всего вышеперечисленного? И что вы имеете в виду, настраивая валидаторы на основе конфигурации, например, хотите ли вы прочитать правила из какого-либо внешнего файла свойств или достаточно аннотации пользовательской проверки? Конкретный пример ваших потребностей мог бы помочь.

2. @NikosParaskevopoulos Я уточнил вопрос с помощью информации, которую вы просили. Теперь все ясно ?

3. Привет @srini, теперь все намного яснее. Моей первой попыткой приблизиться к решению был бы пользовательский валидатор (там много ресурсов ). Логика этого валидатора будет настраиваться в соответствии с клиентом — здесь тоже много опций, первым делом я прочитаю файл свойств статической конфигурации (самый простой). Если бы вы могли привести конкретный, упрощенный пример фактического варианта использования, кто-нибудь мог бы предложить более конкретное решение.