diff --git a/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java b/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java index f4251be..1b0009c 100644 --- a/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java +++ b/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java @@ -58,6 +58,7 @@ import tech.ailef.dbadmin.external.dto.FacetedSearchRequest; import tech.ailef.dbadmin.external.dto.LogsSearchRequest; import tech.ailef.dbadmin.external.dto.PaginatedResult; import tech.ailef.dbadmin.external.dto.QueryFilter; +import tech.ailef.dbadmin.external.dto.ValidationErrorsContainer; import tech.ailef.dbadmin.external.exceptions.DbAdminException; import tech.ailef.dbadmin.external.exceptions.DbAdminNotFoundException; import tech.ailef.dbadmin.external.exceptions.InvalidPageException; @@ -450,8 +451,9 @@ public class DefaultDbAdminController { attr.addFlashAttribute("error", e.getMessage()); attr.addFlashAttribute("params", params); } catch (ConstraintViolationException e) { - attr.addFlashAttribute("errorTitle", "Unable to INSERT row (no changes applied)"); - attr.addFlashAttribute("error", e.toString()); + attr.addFlashAttribute("errorTitle", "Unable to INSERT row (validation error)"); + attr.addFlashAttribute("error", "See below for details"); + attr.addFlashAttribute("validationErrors", new ValidationErrorsContainer(e)); attr.addFlashAttribute("params", params); } @@ -474,8 +476,9 @@ public class DefaultDbAdminController { attr.addFlashAttribute("error", e.getMessage()); attr.addFlashAttribute("params", params); } catch (ConstraintViolationException e) { - attr.addFlashAttribute("errorTitle", "Unable to INSERT row (no changes applied)"); - attr.addFlashAttribute("error", e.toString()); + attr.addFlashAttribute("errorTitle", "Unable to INSERT row (validation error)"); + attr.addFlashAttribute("error", "See below for details"); + attr.addFlashAttribute("validationErrors", new ValidationErrorsContainer(e)); attr.addFlashAttribute("params", params); } } @@ -490,8 +493,9 @@ public class DefaultDbAdminController { attr.addFlashAttribute("error", e.getMessage()); attr.addFlashAttribute("params", params); } catch (ConstraintViolationException e) { - attr.addFlashAttribute("errorTitle", "Unable to INSERT row (no changes applied)"); - attr.addFlashAttribute("error", e.toString()); + attr.addFlashAttribute("errorTitle", "Unable to INSERT row (validation error)"); + attr.addFlashAttribute("error", "See below for details"); + attr.addFlashAttribute("validationErrors", new ValidationErrorsContainer(e)); attr.addFlashAttribute("params", params); } } diff --git a/src/main/java/tech/ailef/dbadmin/external/dto/ValidationErrorsContainer.java b/src/main/java/tech/ailef/dbadmin/external/dto/ValidationErrorsContainer.java new file mode 100644 index 0000000..069deb8 --- /dev/null +++ b/src/main/java/tech/ailef/dbadmin/external/dto/ValidationErrorsContainer.java @@ -0,0 +1,28 @@ +package tech.ailef.dbadmin.external.dto; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; + +public class ValidationErrorsContainer { + private Map>> errors = new HashMap<>(); + + public ValidationErrorsContainer(ConstraintViolationException e) { + e.getConstraintViolations().forEach(c -> { + errors.putIfAbsent(c.getPropertyPath().toString(), new ArrayList<>()); + errors.get(c.getPropertyPath().toString()).add(c); + }); + } + + public List> forField(String name) { + return errors.getOrDefault(name, new ArrayList<>()); + } + + public boolean isEmpty() { + return errors.isEmpty(); + } +} diff --git a/src/main/resources/static/css/dbadmin.css b/src/main/resources/static/css/dbadmin.css index adc1cfd..5d7a35d 100644 --- a/src/main/resources/static/css/dbadmin.css +++ b/src/main/resources/static/css/dbadmin.css @@ -1,3 +1,7 @@ +.text-red { + color: red; +} + .separator-light { opacity: 25%; } diff --git a/src/main/resources/templates/model/create.html b/src/main/resources/templates/model/create.html index 365d94f..a661bf3 100644 --- a/src/main/resources/templates/model/create.html +++ b/src/main/resources/templates/model/create.html @@ -57,6 +57,10 @@ "> +