Skip to content

Conversation

@gcatanese
Copy link
Contributor

PR to generate the several models:

  • Dispute Webhooks
  • Report Webhooks
  • Tokenization Webhooks
  • NegativeBalanceWarning Webhooks
  • Management Webhooks

All models have been updated to handle the nullable value (Mustache templates have been updated as part of #1603).

@gcatanese gcatanese requested review from a team as code owners December 8, 2025 16:06
@gcatanese gcatanese requested a review from galesky-a December 8, 2025 16:06
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @gcatanese, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request focuses on expanding the library's webhook model coverage by generating new models for several Adyen services. A significant part of this update is the implementation of a robust mechanism for handling nullable values in these models, ensuring that the JSON output accurately reflects the presence or absence of data, which is crucial for reliable webhook processing.

Highlights

  • New Webhook Model Generation: This pull request introduces newly generated models for various Adyen webhooks, specifically covering Dispute, Report, Tokenization, Negative Balance Warning, and Management webhooks. These models are essential for processing notifications from these services.
  • Enhanced Null Value Handling: All generated models have been updated to explicitly handle nullable values during JSON serialization. This involves adding isSet<Property> flags for each model property, an includeNullValues flag, and a getExplicitNulls method to ensure that properties explicitly set to null are correctly represented in the JSON payload, aligning with recent serialization improvements.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces changes to a large number of model classes to support explicit serialization of null values. This is achieved by adding isSet flags for each property and a mechanism to conditionally include nulls in the JSON output using Jackson's @JsonAnyGetter. While the implementation appears correct, it introduces a significant amount of duplicated code across all modified models. My review includes a suggestion to refactor this common logic into a base class to improve maintainability.

Comment on lines +186 to +211
/** Returns a map of properties to be merged into the JSON payload as explicit null values. */
@JsonInclude(JsonInclude.Include.ALWAYS)
@JsonAnyGetter
public Map<String, Object> getExplicitNulls() {
if (!this.includeNullValues) {
return Collections.emptyMap();
}

Map<String, Object> nulls = new HashMap<>();

if (isSetCurrency) {
addIfNull(nulls, JSON_PROPERTY_CURRENCY, this.currency);
}
if (isSetValue) {
addIfNull(nulls, JSON_PROPERTY_VALUE, this.value);
}

return nulls;
}

// add to map when value is null
private void addIfNull(Map<String, Object> map, String key, Object value) {
if (value == null) {
map.put(key, null);
}
}
Copy link
Contributor

Choose a reason for hiding this comment

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

high

There is a large amount of duplicated code across all the new and modified model classes for handling explicit null serialization. Specifically, the includeNullValues field, its accessor methods, the getExplicitNulls() method, and the addIfNull() helper method are duplicated in every model.

This widespread duplication makes the code difficult to maintain. Any future bug fix or enhancement to this logic would need to be applied to dozens of files.

To improve maintainability, I recommend refactoring this common functionality into an abstract base class. For example:

public abstract class AbstractWebhookModel {
    @JsonIgnore
    private boolean includeNullValues = false;

    // Public methods for includeNullValues...

    protected void addIfNull(Map<String, Object> map, String key, Object value) {
        if (value == null) {
            map.put(key, null);
        }
    }

    protected boolean shouldIncludeNulls() {
        return this.includeNullValues;
    }
}

Model classes could then extend this base class. This would centralize the includeNullValues logic and the addIfNull helper. The getExplicitNulls() method in each model would be simplified, calling shouldIncludeNulls() and addIfNull() from the base class.

Since this code is auto-generated, this refactoring would likely need to be implemented in the underlying code generation templates.

@gcatanese gcatanese added the Enhancement Indicates new feature requests label Dec 8, 2025
@gcatanese
Copy link
Contributor Author

Closing as webhook models no longer need to be updated

@gcatanese gcatanese closed this Dec 10, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Enhancement Indicates new feature requests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants