This is an automated email from the ASF dual-hosted git repository.

adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git

commit 56f0b83d40facb8dd38bac3865bd70747f2299ae
Author: Oleksii Novikov <[email protected]>
AuthorDate: Wed Aug 13 14:55:05 2025 +0300

    FINERACT-2343: Fix update currency api validation
---
 .../JakartaValidationExceptionMapper.java           | 21 +++++++++++++++++----
 .../monetary/api/CurrenciesApiResource.java         |  3 ++-
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git 
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/JakartaValidationExceptionMapper.java
 
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/JakartaValidationExceptionMapper.java
index 04641cb2a8..00980f0e5a 100644
--- 
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/JakartaValidationExceptionMapper.java
+++ 
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/JakartaValidationExceptionMapper.java
@@ -25,22 +25,28 @@ import jakarta.ws.rs.core.Response.Status;
 import jakarta.ws.rs.ext.ExceptionMapper;
 import jakarta.ws.rs.ext.Provider;
 import java.util.List;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.fineract.infrastructure.core.data.ApiGlobalErrorResponse;
 import org.apache.fineract.infrastructure.core.data.ApiParameterError;
 import org.apache.fineract.infrastructure.core.exception.ErrorHandler;
+import org.springframework.context.MessageSource;
+import org.springframework.context.i18n.LocaleContextHolder;
 import org.springframework.stereotype.Component;
 
 @Slf4j
 @Provider
 @Component
+@RequiredArgsConstructor
 public class JakartaValidationExceptionMapper implements 
FineractExceptionMapper, ExceptionMapper<ConstraintViolationException> {
 
+    private final MessageSource messageSource;
+
     @Override
     public Response toResponse(final ConstraintViolationException exception) {
         log.warn("Exception occurred", 
ErrorHandler.findMostSpecificException(exception));
-        final ApiGlobalErrorResponse dataValidationErrorResponse = 
ApiGlobalErrorResponse.badClientRequest(exception.getMessage(),
-                exception.getLocalizedMessage(), 
getApiParameterErrors(exception));
+        final ApiGlobalErrorResponse dataValidationErrorResponse = 
ApiGlobalErrorResponse
+                .badClientRequest("validation.msg.validation.errors.exist", 
"Validation errors exist.", getApiParameterErrors(exception));
 
         return 
Response.status(Status.BAD_REQUEST).entity(dataValidationErrorResponse).type(MediaType.APPLICATION_JSON).build();
     }
@@ -51,7 +57,14 @@ public class JakartaValidationExceptionMapper implements 
FineractExceptionMapper
     }
 
     private List<ApiParameterError> getApiParameterErrors(final 
ConstraintViolationException exception) {
-        return exception.getConstraintViolations().stream().map(violation -> 
ApiParameterError
-                .parameterError(violation.getMessageTemplate(), 
violation.getMessage(), violation.getPropertyPath().toString())).toList();
+        return exception.getConstraintViolations().stream().map(violation -> {
+            final String messageTemplate = violation.getMessageTemplate();
+            final String messageKey = messageTemplate.replace("{", 
"").replace("}", "");
+
+            final String interpolatedMessage = 
messageSource.getMessage(messageKey, null, LocaleContextHolder.getLocale());
+
+            return ApiParameterError.parameterError(messageKey, 
interpolatedMessage, violation.getPropertyPath().toString());
+        }).toList();
     }
+
 }
diff --git 
a/fineract-core/src/main/java/org/apache/fineract/organisation/monetary/api/CurrenciesApiResource.java
 
b/fineract-core/src/main/java/org/apache/fineract/organisation/monetary/api/CurrenciesApiResource.java
index efea32844b..a1a0f6cdf8 100644
--- 
a/fineract-core/src/main/java/org/apache/fineract/organisation/monetary/api/CurrenciesApiResource.java
+++ 
b/fineract-core/src/main/java/org/apache/fineract/organisation/monetary/api/CurrenciesApiResource.java
@@ -20,6 +20,7 @@ package org.apache.fineract.organisation.monetary.api;
 
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
 import jakarta.ws.rs.Consumes;
 import jakarta.ws.rs.GET;
 import jakarta.ws.rs.PUT;
@@ -66,7 +67,7 @@ public class CurrenciesApiResource {
     @Consumes({ MediaType.APPLICATION_JSON })
     @Produces({ MediaType.APPLICATION_JSON })
     @Operation(summary = "Update Currency Configuration", description = 
"Updates the list of currencies permitted for use.")
-    public CurrencyUpdateResponse updateCurrencies(CurrencyUpdateRequest 
request) {
+    public CurrencyUpdateResponse updateCurrencies(@Valid 
CurrencyUpdateRequest request) {
         final var command = new CurrencyUpdateCommand();
 
         command.setId(UUID.randomUUID());

Reply via email to