Валидация – это широко известный процесс в программировании. Скажем, например, что вы хотите проверить, соответствуют ли предоставленные объекты некоторым заданным правилам, прежде чем использовать их или сохранять в базе данных. В spring , например, включена проверка и может использоваться на любом этапе потока приложения. Я попытался мыслить нестандартно и представить настраиваемую проверку объекта с использованием java, используя аннотации над полями класса или используя указанный список критериев без аннотирования класса для проверки.
Чтобы сделать это, я как бы создал репозиторий на github для проверки объектов. Вы можете проверить это здесь , любые предложения приветствуются. Запустите репозиторий, если вам это нравится, и если вы хотите внести свой вклад, создайте запрос на извлечение/слияние.
Примеры использования:
1. Использование аннотаций
Предположим, у нас есть класс Person
, и для всех экземпляров мы хотим, чтобы имя и фамилия были присвоены, а не оставлены null
:
class Person { @Validation private String name; @Validation private String lastName; // .... other fields... // .... getters and setters.. }
И мы создадим экземпляр, затем проверим, является ли он действительным или нет:
AnnotationValidator annotationValidator = new AnnotationValidator(); Person person = new Person(); person.setName("Mustapha"); person.setLastName("Belmokhtar"); boolean isValid = annotationValidator.checkValidation(person); ValidationReport validationReportItem = annotationValidator.getValidationReport(person); // gives the details of each field
Результат:
true {lastName=|found=String:Belmokhtar, expected={!=null}:[], valid=true|, name=|found=String:Mustapha, expected={!=null}:[], valid=true|}
Проверка операторами:
class Person{ // ... others fields @Validation(operator = Operator.GREATER_THAN, value = "18") private int age; // ... getters and setters ... }
Person person = new Person(); person.setAge(20); AnnotationValidator annotationValidator = AnnotationValidator.getInstance(); boolean isValid = annotationValidator.check(person); ValidationReport validationReportItem = annotationValidator.getValidationReport(person);
Результат:
true {age=|found=Integer:20, expected={>}:[18], valid=true|}
2.Использование критериев:
Вы также можете выполнить проверку объектов с помощью Критерий
:
Student student = new Student(); CriteriaValidator criteriaValidator = CriteriaValidator.getInstance(); Criteria criteria = new Criteria(); criteria.setObject(student); criteria.add(Criterion.of("name").is("mustapha")); criteria.add(Criterion.of("address").notNull()); criteria.add(Criterion.of("age").greaterOrEquals(4)); criteria.add(Criterion.of("phoneNumber").matches("\\d{10}")); student.setName("mustapha"); student.setAddress("wall street"); student.setAge(4); student.setPhoneNumber("1234567890"); System.out.println(criteriaValidator.getValidationReport(criteria)); assertTrue(criteriaValidator.check(criteria));
Выход:
address=|found=String:wall street, expected={!=null}:[null], valid=true|, phoneNumber=|found=String:1234567890, expected={REGEX}:[\d{10}], valid=true|, name=|found=String:mustapha, expected={==}:[mustapha], valid=true|, age=|found=Integer:4, expected={>=}:[4], valid=true|}
Критерии для сложных объектов:
Чтобы выполнить проверку по критериям для сложных объектов, вам нужно только указать путь к файлу требуемого поля, например:
class Student { // omittd fields for brievety private Matters matters //... getters and setters } //.... class Matters { private double science; private double maths; private double languages; //... } //...
Процесс валидации:
CriteriaValidator criteriaValidator = CriteriaValidator.getInstance(); Criteria criteria = Criteria.of(student); criteria.add(Criterion.of("matters.maths").lessThan(20.0)); Matters matters = new Matters(); matters.setMaths(19.99); student.setMatters(matters); System.out.println(criteriaValidator.getValidationReport(criteria)); assertTrue(criteriaValidator.check(criteria));
###### ###### Вывод
{matters.maths=|found=Double:19.99, expected={<}:[20.0], valid=true|}
###### Проверка выходных данных для массивов и коллекций:
class Book { private int[] isbn; private TreeSetkeywords; // .. other fields //.. getters and setters }
###### Проверка выходных данных для массивов и коллекций: процесс проверки:
Book book = new Book(); CriteriaValidator criteriaValidator = CriteriaValidator.getInstance(); Criteria criteria = Criteria.of(book); criteria.add(Criterion.of("keywords").length(3)); criteria.add(Criterion.of("isbn").length(11)); int[] isbn = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; Setkeywords = new TreeSet<>(); keywords.add("science"); keywords.add("earth"); keywords.add("universe"); book.setKeywords(keywords); book.setIsbn(isbn); System.out.println(criteriaValidator.getValidationReport(criteria)); assertTrue(criteriaValidator.check(criteria));
###### Проверка вывода за кадром массивы и коллекции: Процесс проверки: Вывод
{keywords=|found=TreeSet:[earth, science, universe], expected={length}:[3], valid=true|, isbn=|found=int[]:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], expected={length}:[11], valid=true|}
Оригинал: “https://dev.to/mustabelmo/java-object-validation-2p9k”