Skip to content

FINERACT-2511: Return 400 for invalid dateFormat on client create/up…#5558

Closed
oluexpert99 wants to merge 0 commit intoapache:developfrom
TECHSERVICES-LIMITED:bugfix/FINERACT-2511
Closed

FINERACT-2511: Return 400 for invalid dateFormat on client create/up…#5558
oluexpert99 wants to merge 0 commit intoapache:developfrom
TECHSERVICES-LIMITED:bugfix/FINERACT-2511

Conversation

@oluexpert99
Copy link
Copy Markdown
Contributor

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
  • 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 for verifying the changes made.
  • Follow our 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". Large changes can be made in a branch, with assistance. Ask for help on the developer mailing list.

Your assigned reviewer(s) will follow our guidelines for code reviews.

@IOhacker
Copy link
Copy Markdown
Contributor

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

Copy link
Copy Markdown
Contributor

@IOhacker IOhacker left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kindly review my comments

@oluexpert99 oluexpert99 requested a review from IOhacker February 28, 2026 13:41
@oluexpert99 oluexpert99 changed the title FINERACT-2511 : Return 400 for invalid dateFormat on client create/up… FINERACT-2511: Return 400 for invalid dateFormat on client create/up… Feb 28, 2026
@oluexpert99
Copy link
Copy Markdown
Contributor Author

Kindly review my comments

@IOhacker done

Copy link
Copy Markdown
Contributor

@IOhacker IOhacker left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Comment on lines +28 to +53
@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;
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unnecessarily overcomplicated.
Below is doing the same:

try {
            DateTimeFormatter.ofPattern(pattern);
            return true;
        } catch (IllegalArgumentException e) {
            return false;
        }

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@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.

Copy link
Copy Markdown
Contributor

@adamsaghy adamsaghy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please kindly check my concern.

@oluexpert99
Copy link
Copy Markdown
Contributor Author

Please kindly check my concern.

@adamsaghy , concern addressed

@adamsaghy
Copy link
Copy Markdown
Contributor

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...

@oluexpert99
Copy link
Copy Markdown
Contributor Author

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)

@oluexpert99
Copy link
Copy Markdown
Contributor Author

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

@adamsaghy
Copy link
Copy Markdown
Contributor

@oluexpert99 Please review and fix the failing checks!

@oluexpert99 oluexpert99 force-pushed the bugfix/FINERACT-2511 branch from 77f458a to 2364bc6 Compare March 17, 2026 10:47
@oluexpert99 oluexpert99 requested a review from adamsaghy March 17, 2026 11:12
@oluexpert99
Copy link
Copy Markdown
Contributor Author

  • Verify Liquibase Backward Compatibility / liquibase-backward-compatibility-check (pull_request)

Hi @adamsaghy , the failing tests are not connected to the fixes made. I guess it's a general issue as I saw migration mdsum failure

@adamsaghy
Copy link
Copy Markdown
Contributor

@oluexpert99 Please rebase this PR with latest develop branch.

@adamsaghy
Copy link
Copy Markdown
Contributor

@oluexpert99 Please make sure you are using rebase and squash your commits! ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants