From f9e0c1a141b4c8f38f47a1f212e2f8ccc2fc4681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20B=C3=A9gaudeau?= Date: Sun, 20 Aug 2023 00:26:02 +0200 Subject: [PATCH] [cleanup] Improve the message created in case of a validation error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Bégaudeau --- .../AbstractValidatingAggregateRoot.java | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/backend/svalyn-studio-domain/src/main/java/com/svalyn/studio/domain/AbstractValidatingAggregateRoot.java b/backend/svalyn-studio-domain/src/main/java/com/svalyn/studio/domain/AbstractValidatingAggregateRoot.java index 8214b98..c404588 100644 --- a/backend/svalyn-studio-domain/src/main/java/com/svalyn/studio/domain/AbstractValidatingAggregateRoot.java +++ b/backend/svalyn-studio-domain/src/main/java/com/svalyn/studio/domain/AbstractValidatingAggregateRoot.java @@ -19,12 +19,14 @@ package com.svalyn.studio.domain; -import org.springframework.data.domain.AbstractAggregateRoot; - -import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; import jakarta.validation.Validation; import jakarta.validation.ValidatorFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.annotation.Transient; +import org.springframework.data.domain.AbstractAggregateRoot; + import java.util.stream.Collectors; /** @@ -36,16 +38,24 @@ */ public class AbstractValidatingAggregateRoot> extends AbstractAggregateRoot { + @Transient + private final Logger logger = LoggerFactory.getLogger(AbstractValidatingAggregateRoot.class); + @Override protected T registerEvent(T event) { - ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); - var validator = factory.getValidator(); - var violations = validator.validate(event); - if (!violations.isEmpty()) { - var message = violations.stream() - .map(ConstraintViolation::getMessage) - .collect(Collectors.joining(", ")); - throw new ConstraintViolationException(message, violations); + try (ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) { + var validator = factory.getValidator(); + var violations = validator.validate(event); + if (!violations.isEmpty()) { + var message = violations.stream() + .map(constraintViolation -> constraintViolation.getPropertyPath().toString() + " " + constraintViolation.getMessage()) + .collect(Collectors.joining(", ")); + + var exception = new ConstraintViolationException(message, violations); + logger.warn(exception.getMessage(), exception); + + throw exception; + } } return super.registerEvent(event);