From ec9fbf38557828696a072860aeea79bf2e9219cb Mon Sep 17 00:00:00 2001 From: Andreas Hufler Date: Wed, 22 Oct 2025 11:18:29 +0200 Subject: [PATCH 1/2] add interface to use enums as constant message references providing a string code --- .../exception/ClientRuntimeException.java | 17 +++++++++++++++ .../ConstraintViolationExceptionBuilder.java | 10 ++++++++- .../exception/ExceptionMessageDefinition.java | 21 +++++++++++++++++++ .../exception/ServerRuntimeException.java | 17 +++++++++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/main/java/it/aboutbits/springboot/toolbox/exception/ExceptionMessageDefinition.java diff --git a/src/main/java/it/aboutbits/springboot/toolbox/exception/ClientRuntimeException.java b/src/main/java/it/aboutbits/springboot/toolbox/exception/ClientRuntimeException.java index c0de138..156afcf 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/exception/ClientRuntimeException.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/exception/ClientRuntimeException.java @@ -4,10 +4,18 @@ public class ClientRuntimeException extends RuntimeException { public ClientRuntimeException() { } + public ClientRuntimeException(ExceptionMessageDefinition message) { + super(message.code()); + } + public ClientRuntimeException(String message) { super(message); } + public ClientRuntimeException(ExceptionMessageDefinition message, Throwable cause) { + super(message.code(), cause); + } + public ClientRuntimeException(String message, Throwable cause) { super(message, cause); } @@ -16,6 +24,15 @@ public ClientRuntimeException(Throwable cause) { super(cause); } + public ClientRuntimeException( + ExceptionMessageDefinition message, + Throwable cause, + boolean enableSuppression, + boolean writableStackTrace + ) { + super(message.code(), cause, enableSuppression, writableStackTrace); + } + public ClientRuntimeException( String message, Throwable cause, diff --git a/src/main/java/it/aboutbits/springboot/toolbox/exception/ConstraintViolationExceptionBuilder.java b/src/main/java/it/aboutbits/springboot/toolbox/exception/ConstraintViolationExceptionBuilder.java index 14d0c38..5caf125 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/exception/ConstraintViolationExceptionBuilder.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/exception/ConstraintViolationExceptionBuilder.java @@ -6,6 +6,7 @@ import jakarta.validation.metadata.ConstraintDescriptor; import lombok.NonNull; import org.hibernate.validator.internal.engine.path.PathImpl; +import org.springframework.lang.Nullable; import java.util.HashSet; import java.util.Set; @@ -21,7 +22,14 @@ public static ConstraintViolationExceptionBuilder constraintViolation() { return new ConstraintViolationExceptionBuilder(); } - public ConstraintViolationExceptionBuilder causedBy(@NonNull String propertyPath, String message) { + public ConstraintViolationExceptionBuilder causedBy( + @NonNull String propertyPath, + @NonNull ExceptionMessageDefinition message + ) { + return causedBy(propertyPath, message.code()); + } + + public ConstraintViolationExceptionBuilder causedBy(@NonNull String propertyPath, @Nullable String message) { var constraintViolation = new CustomConstraintViolation(message, PathImpl.createPathFromString(propertyPath)); constraintViolations.add(constraintViolation); return this; diff --git a/src/main/java/it/aboutbits/springboot/toolbox/exception/ExceptionMessageDefinition.java b/src/main/java/it/aboutbits/springboot/toolbox/exception/ExceptionMessageDefinition.java new file mode 100644 index 0000000..a6bcc0f --- /dev/null +++ b/src/main/java/it/aboutbits/springboot/toolbox/exception/ExceptionMessageDefinition.java @@ -0,0 +1,21 @@ +package it.aboutbits.springboot.toolbox.exception; + +/** + * Use this to create a class or enum that defines the exception messages.
+ * This way the messages can be referenced by a constant rather than using plain strings. + *

+ * eg.: + *

{@code
+ * @Getter
+ * @Accessors(fluent = true)
+ * @RequiredArgsConstructor
+ * enum MyExceptionMessages implements ExceptionMessageDefinition {
+ *     SHARED_ERROR_GENERAL("shared.error.general");
+ *
+ *     private final String code;
+ * }
+ * }
+ */ +public interface ExceptionMessageDefinition { + String code(); +} diff --git a/src/main/java/it/aboutbits/springboot/toolbox/exception/ServerRuntimeException.java b/src/main/java/it/aboutbits/springboot/toolbox/exception/ServerRuntimeException.java index 40aea6a..0a20748 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/exception/ServerRuntimeException.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/exception/ServerRuntimeException.java @@ -4,10 +4,18 @@ public class ServerRuntimeException extends RuntimeException { public ServerRuntimeException() { } + public ServerRuntimeException(ExceptionMessageDefinition message) { + super(message.code()); + } + public ServerRuntimeException(String message) { super(message); } + public ServerRuntimeException(ExceptionMessageDefinition message, Throwable cause) { + super(message.code(), cause); + } + public ServerRuntimeException(String message, Throwable cause) { super(message, cause); } @@ -16,6 +24,15 @@ public ServerRuntimeException(Throwable cause) { super(cause); } + public ServerRuntimeException( + ExceptionMessageDefinition message, + Throwable cause, + boolean enableSuppression, + boolean writableStackTrace + ) { + super(message.code(), cause, enableSuppression, writableStackTrace); + } + public ServerRuntimeException( String message, Throwable cause, From 05aadca2fb548bb985826d01ccfd66cd8df30768 Mon Sep 17 00:00:00 2001 From: SirCotare Date: Wed, 22 Oct 2025 11:34:30 +0200 Subject: [PATCH 2/2] Update src/main/java/it/aboutbits/springboot/toolbox/exception/ExceptionMessageDefinition.java Co-authored-by: Thomas Sapelza --- .../toolbox/exception/ExceptionMessageDefinition.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/it/aboutbits/springboot/toolbox/exception/ExceptionMessageDefinition.java b/src/main/java/it/aboutbits/springboot/toolbox/exception/ExceptionMessageDefinition.java index a6bcc0f..d5b1357 100644 --- a/src/main/java/it/aboutbits/springboot/toolbox/exception/ExceptionMessageDefinition.java +++ b/src/main/java/it/aboutbits/springboot/toolbox/exception/ExceptionMessageDefinition.java @@ -1,11 +1,11 @@ package it.aboutbits.springboot.toolbox.exception; /** - * Use this to create a class or enum that defines the exception messages.
- * This way the messages can be referenced by a constant rather than using plain strings. + * Use this to create a class or enum that defines the exception messages. + * This way, the messages can be referenced by a constant rather than using plain strings. *

- * eg.: - *

{@code
+ * Example:
+ * {@snippet :
  * @Getter
  * @Accessors(fluent = true)
  * @RequiredArgsConstructor
@@ -14,7 +14,7 @@
  *
  *     private final String code;
  * }
- * }
+ * } */ public interface ExceptionMessageDefinition { String code();