You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by "oluexpert99 (via GitHub)" <gi...@apache.org> on 2026/02/28 05:35:56 UTC

[PR] FINERACT-2511 : Return 400 for invalid dateFormat on client create/up… [fineract]

oluexpert99 opened a new pull request, #5558:
URL: https://github.com/apache/fineract/pull/5558

   ## Description
   
   Return 400 for invalid dateFormat on client create/update
   
                   - Validate dateFormat in ClientDataValidator (create and update) so invalid
                     patterns (e.g. "02 February 2026") are rejected with 400 instead of 500.
                   - Add @DateFormat constraint and DateFormatValidator in fineract-validation;
                     ClientDataValidator uses DateFormatValidator.isValidPattern() for reuse.
                   - Annotate BusinessDateUpdateRequest.dateFormat with @DateFormat.
                   - Add ClientDataValidatorTest and DateFormatValidationTest;
   
   
   
   Describe the changes made and why they were made. (Ignore if these details are present on the associated Apache Fineract JIRA ticket.)
   
   ## Checklist
   
   Please make sure these boxes are checked before submitting your pull request - thanks!
   
   - [ ] Write the commit message as per [our guidelines](https://github.com/apache/fineract/blob/develop/CONTRIBUTING.md#pull-requests)
   - [ ] Acknowledge that we will not review PRs that are not passing the build _("green")_ - it is your responsibility to get a proposed PR to pass the build, not primarily the project's maintainers.
   - [ ] Create/update [unit or integration tests](https://fineract.apache.org/docs/current/#_testing) for verifying the changes made.
   - [ ] Follow our [coding conventions](https://cwiki.apache.org/confluence/display/FINERACT/Coding+Conventions).
   - [ ] Add required Swagger annotation and update API documentation at fineract-provider/src/main/resources/static/legacy-docs/apiLive.htm with details of any API changes
   - [ ] [This PR must not be a "code dump"](https://cwiki.apache.org/confluence/display/FINERACT/Pull+Request+Size+Limit). Large changes can be made in a branch, with assistance. Ask for help on the [developer mailing list](https://fineract.apache.org/#contribute).
   
   Your assigned reviewer(s) will follow our [guidelines for code reviews](https://cwiki.apache.org/confluence/display/FINERACT/Code+Review+Guide).
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] FINERACT-2511: Return 400 for invalid dateFormat on client create/up… [fineract]

Posted by "oluexpert99 (via GitHub)" <gi...@apache.org>.
oluexpert99 commented on PR #5558:
URL: https://github.com/apache/fineract/pull/5558#issuecomment-3977736993

   > Kindly review my comments
   
   @IOhacker  done 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] FINERACT-2511: Return 400 for invalid dateFormat on client create/up… [fineract]

Posted by "adamsaghy (via GitHub)" <gi...@apache.org>.
adamsaghy commented on PR #5558:
URL: https://github.com/apache/fineract/pull/5558#issuecomment-3997056675

   > > Please kindly check my concern.
   > 
   > @adamsaghy , concern addressed
   
   I see no code changes, neither reasons why to leave it AS-IS. My concern was reflecting the fact it goes through multiple checks and multiple methods unnecessarily...


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] FINERACT-2511: Return 400 for invalid dateFormat on client create/up… [fineract]

Posted by "adamsaghy (via GitHub)" <gi...@apache.org>.
adamsaghy commented on code in PR #5558:
URL: https://github.com/apache/fineract/pull/5558#discussion_r2871394383


##########
fineract-validation/src/main/java/org/apache/fineract/validation/constraints/DateFormatValidator.java:
##########
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.validation.constraints;
+
+import jakarta.validation.ConstraintValidator;
+import jakarta.validation.ConstraintValidatorContext;
+import java.time.format.DateTimeFormatter;
+import org.apache.commons.lang3.StringUtils;
+
+public class DateFormatValidator implements ConstraintValidator<DateFormat, String> {
+
+    @Override
+    public boolean isValid(String value, ConstraintValidatorContext context) {
+        if (StringUtils.isBlank(value)) {
+            return true; // blank is allowed; use @NotBlank if required
+        }
+        return isValidPattern(value);
+    }
+
+    /**
+     * Checks whether the given string is a valid {@link DateTimeFormatter} pattern. Can be used by validators that are
+     * not annotation-based (e.g. when validating JSON commands that do not bind to a DTO).
+     *
+     * @param pattern
+     *            the candidate pattern string
+     * @return {@code true} if the pattern is valid, {@code false} otherwise
+     */
+    public static boolean isValidPattern(String pattern) {
+        if (StringUtils.isBlank(pattern)) {
+            return true;
+        }
+        try {
+            DateTimeFormatter.ofPattern(pattern);
+            return true;
+        } catch (IllegalArgumentException e) {
+            return false;
+        }

Review Comment:
   Unnecessarily overcomplicated.
   Below is doing the same:
   ```
   try {
               DateTimeFormatter.ofPattern(pattern);
               return true;
           } catch (IllegalArgumentException e) {
               return false;
           }
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] FINERACT-2511 : Return 400 for invalid dateFormat on client create/up… [fineract]

Posted by "IOhacker (via GitHub)" <gi...@apache.org>.
IOhacker commented on PR #5558:
URL: https://github.com/apache/fineract/pull/5558#issuecomment-3976681984

   @oluexpert99 sign your commit and make sure it is following the PR naming convention


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] FINERACT-2511: Return 400 for invalid dateFormat on client create/up… [fineract]

Posted by "oluexpert99 (via GitHub)" <gi...@apache.org>.
oluexpert99 commented on code in PR #5558:
URL: https://github.com/apache/fineract/pull/5558#discussion_r2883240856


##########
fineract-validation/src/main/java/org/apache/fineract/validation/constraints/DateFormatValidator.java:
##########
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.validation.constraints;
+
+import jakarta.validation.ConstraintValidator;
+import jakarta.validation.ConstraintValidatorContext;
+import java.time.format.DateTimeFormatter;
+import org.apache.commons.lang3.StringUtils;
+
+public class DateFormatValidator implements ConstraintValidator<DateFormat, String> {
+
+    @Override
+    public boolean isValid(String value, ConstraintValidatorContext context) {
+        if (StringUtils.isBlank(value)) {
+            return true; // blank is allowed; use @NotBlank if required
+        }
+        return isValidPattern(value);
+    }
+
+    /**
+     * Checks whether the given string is a valid {@link DateTimeFormatter} pattern. Can be used by validators that are
+     * not annotation-based (e.g. when validating JSON commands that do not bind to a DTO).
+     *
+     * @param pattern
+     *            the candidate pattern string
+     * @return {@code true} if the pattern is valid, {@code false} otherwise
+     */
+    public static boolean isValidPattern(String pattern) {
+        if (StringUtils.isBlank(pattern)) {
+            return true;
+        }
+        try {
+            DateTimeFormatter.ofPattern(pattern);
+            return true;
+        } catch (IllegalArgumentException e) {
+            return false;
+        }

Review Comment:
   @adamsaghy 
   
   Thanks for the review. The current implementation of DateFormatValidator#isValidPattern already uses that try { DateTimeFormatter.ofPattern(pattern); } catch (IllegalArgumentException e) { ... } pattern (with an additional early return for blank strings to preserve existing behavior), so we should be aligned here.
    Please let me know if you’d like to change how blank/empty patterns are handled.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] FINERACT-2511: Return 400 for invalid dateFormat on client create/up… [fineract]

Posted by "adamsaghy (via GitHub)" <gi...@apache.org>.
adamsaghy commented on PR #5558:
URL: https://github.com/apache/fineract/pull/5558#issuecomment-4022336275

   @oluexpert99 Please review and fix the failing checks!


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] FINERACT-2511: Return 400 for invalid dateFormat on client create/up… [fineract]

Posted by "oluexpert99 (via GitHub)" <gi...@apache.org>.
oluexpert99 commented on PR #5558:
URL: https://github.com/apache/fineract/pull/5558#issuecomment-3996939698

   > Please kindly check my concern.
   
   @adamsaghy  , concern addressed 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] FINERACT-2511: Return 400 for invalid dateFormat on client create/up… [fineract]

Posted by "oluexpert99 (via GitHub)" <gi...@apache.org>.
oluexpert99 commented on PR #5558:
URL: https://github.com/apache/fineract/pull/5558#issuecomment-3997083564

   > > > Please kindly check my concern.
   > > 
   > > 
   > > @adamsaghy , concern addressed
   > 
   > I see no code changes, neither reasons why to leave it AS-IS. My concern was reflecting the fact it goes through multiple checks and multiple methods unnecessarily...
   
   Hi @adamsaghy 
   There are two methods 
   one is used for the annotation  @DateFormat on POJOs 
   isValidPattern was created for JSON commands that do not bind to a DTO ( where we cannot make use of the annotation) 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] FINERACT-2511: Return 400 for invalid dateFormat on client create/up… [fineract]

Posted by "oluexpert99 (via GitHub)" <gi...@apache.org>.
oluexpert99 commented on PR #5558:
URL: https://github.com/apache/fineract/pull/5558#issuecomment-3997159036

   Hi @adamsaghy  , I update the code now , does this look better ?


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@fineract.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org