From 0fd0f977eb2af91b8c0288a64ebf796dfbc36d32 Mon Sep 17 00:00:00 2001 From: Adam Saghy Date: Thu, 29 Jan 2026 14:57:49 +0100 Subject: [PATCH] FINERACT-2421: Allow hyphens in query params of Batch API calls --- .../fineract/batch/command/CommandStrategyProvider.java | 4 ++-- .../fineract/batch/command/CommandStrategyProviderTest.java | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/fineract-core/src/main/java/org/apache/fineract/batch/command/CommandStrategyProvider.java b/fineract-core/src/main/java/org/apache/fineract/batch/command/CommandStrategyProvider.java index e024b35df..01e6b6d25 100644 --- a/fineract-core/src/main/java/org/apache/fineract/batch/command/CommandStrategyProvider.java +++ b/fineract-core/src/main/java/org/apache/fineract/batch/command/CommandStrategyProvider.java @@ -47,12 +47,12 @@ public class CommandStrategyProvider { /** * Regex pattern for specifying any number of query params or not specific any query param */ - private static final String OPTIONAL_QUERY_PARAM_REGEX = "(\\?(\\w+=[^&]+)(?:&\\w+=[^&]+)*)?"; + private static final String OPTIONAL_QUERY_PARAM_REGEX = "(\\?([\\w-]+=[^&]+)(?:&[\\w-]+=[^&]+)*)?"; /** * Regex pattern for specifying query params */ - private static final String MANDATORY_QUERY_PARAM_REGEX = "(\\?(\\w+=[^&]+)(?:&\\w+=[^&]+)*)"; + private static final String MANDATORY_QUERY_PARAM_REGEX = "(\\?([\\w-]+=[^&]+)(?:&[\\w-]+=[^&]+)*)"; /** * Regex pattern for specifying any query param that has key = 'command' or not specific anything. diff --git a/fineract-provider/src/test/java/org/apache/fineract/batch/command/CommandStrategyProviderTest.java b/fineract-provider/src/test/java/org/apache/fineract/batch/command/CommandStrategyProviderTest.java index 9333ebddf..004869974 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/batch/command/CommandStrategyProviderTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/batch/command/CommandStrategyProviderTest.java @@ -225,6 +225,10 @@ public class CommandStrategyProviderTest { Arguments.of( "loans/external-id/0083477d-ea2a-45a4-a244-cb79a9ecf741/transactions/reage-preview?frequencyType=MONTHS&locale=en_US&frequencyNumber=1&dateFormat=MM%2Fdd%2Fyyyy&startDate=02%2F05%2F2026&numberOfInstallments=6", HttpMethod.GET, "getReagePreviewByLoanExternalIdCommandStrategy", + mock(GetReagePreviewByLoanExternalIdCommandStrategy.class)), + Arguments.of( + "loans/external-id/8dfad438-2319-48ce-8520-10a62801e9a1/transactions/reage-preview?frequency-number=2&frequencyType=long-string", + HttpMethod.GET, "getReagePreviewByLoanExternalIdCommandStrategy", mock(GetReagePreviewByLoanExternalIdCommandStrategy.class))); }