Забезпечення обмежень

Очищення даних у Java

Dennis Lee

Software Engineer

Контроль якості даних

  • Анотації валідації: контроль якості даних
  • Помилки: відсутні країни, некоректні суми, від'ємні відвантажені коробки
  • Описки: 1000 коробок замість 100

 

 

Salesperson Country Product Date Amount Boxes Shipped
James Rudeforth UK Mint Chip Choco 4-Jan-22 $5320 100
Van Tuxwell India 85% Dark Bars 1-Aug-22 $7896 94
Gigi Bohling US Peanut Butter Cubes 7-Jul-22 $4501 91
Очищення даних у Java

Базові анотації валідації

import jakarta.validation.constraints.NotNull;     // Правила для порожніх полів
import jakarta.validation.constraints.Size;        // Правила для довжини рядків

public class ChocolateSale {
    @NotNull(message = "Salesperson cannot be empty")
    private String salesperson;


@NotNull(message = "Country cannot be empty") // Можна застосовувати кілька правил @Size(min = 2, max = 50) // Обмежує довжину назви країни private String country;
@NotNull(message = "Product cannot be empty") private String product; }
Очищення даних у Java

Числові обмеження

import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
// Повідомлення про помилки покажемо пізніше
public class ChocolateSale {
    @Min(value = 0, message = "Sales amount must be positive")
    private Double amount;


@Min(value = 1, message = "Must ship at least 1 box") @Max(value = 1000, message = "Cannot ship more than 1000 boxes") private Integer boxesShipped; }
Очищення даних у Java

Імпорти для забезпечення обмежень

// Зберігає унікальні помилки валідації (без дублікатів)
import java.util.Set;
// Містить деталі однієї помилки (поле, повідомлення тощо)
import jakarta.validation.ConstraintViolation;
// Точка входу для створення валідаторів
import jakarta.validation.Validation;
// Перевіряє дані за правилами
import jakarta.validation.Validator;
// Створює налаштовані валідатори
import jakarta.validation.ValidatorFactory;
// Генерується, коли валідація не проходить
import jakarta.validation.ConstraintViolationException;
Очищення даних у Java

Реалізація валідатора

class SalesValidator {
    // Створюємо інструменти для перевірки даних
    private static final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();

// Отримуємо валідатор для перевірки записів продажів private static final Validator validator = factory.getValidator();
public static Set<ConstraintViolation<ChocolateSale>> validateSale(ChocolateSale sale) { // Перевіряємо запис і повертаємо знайдені проблеми return validator.validate(sale); } }
Очищення даних у Java

Обробка результатів валідації

public class Main {
    public static void main(String[] args) {
        // Створюємо продаж із некоректними даними (null для країни, від'ємна сума)
        ChocolateSale sale = new ChocolateSale("James Rudeforth", null, "Mint Chip Choco",
                LocalDate.parse("2022-01-04"), -5320.0, 1500);


// Перевіряємо запис на порушення валідації Set<ConstraintViolation<ChocolateSale>> violations = SalesValidator.validateSale(sale); // Друкуємо кожне повідомлення про помилку violations.forEach(violation -> System.out.println(violation.getMessage()));
// Якщо знайдено порушення — кидаємо виняток if (!violations.isEmpty()) throw new ConstraintViolationException(violations); } }
Очищення даних у Java

Результат валідації

Country cannot be empty
Sales amount must be positive
Cannot ship more than 1000 boxes

Exception in thread "main" jakarta.validation.ConstraintViolationException
Очищення даних у Java

Валідація запобігає дорогим помилкам

  • @NotNull, @Size, @Min і @Max рано виявляють помилки
  • Застосовуйте техніки валідації до типових бізнес‑задач
  • Перша лінія захисту від дорогих помилок у даних

Перебирання какао‑бобів у виробничих умовах

Очищення даних у Java

Давайте потренуємось!

Очищення даних у Java

Preparing Video For Download...