Skip to content

Add JsonNullable schema support - #3340

Merged
bnasslahsen merged 1 commit into
springdoc:mainfrom
dpkass:feat/jsonnullable-support
Sep 6, 2026
Merged

Add JsonNullable schema support#3340
bnasslahsen merged 1 commit into
springdoc:mainfrom
dpkass:feat/jsonnullable-support

Conversation

@dpkass

@dpkass dpkass commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Adds support for jackson-databind-nullable when the library is present. JsonNullable<T> is represented as its wrapped value rather than its Java wrapper properties.

Unlike normal SpringDoc inference, non-null constraints on JsonNullable<T> do not make the property required. This is intentional: JsonNullable is purpose-built to distinguish an omitted property from an explicitly supplied null.

JsonNullable<String> name;

Permits omission, null or a string. Both declarations below permit omission but exclude null:

JsonNullable<@NotNull String> name;
@NotNull JsonNullable<String> name;

The second form relies on JsonNullable’s default validation unwrapping. Explicit required declarations, such as @Schema(requiredMode = REQUIRED), remain respected.

Schema resolution and annotation handling are delegated to Swagger Core. Regression fixtures cover OpenAPI 3.0 and 3.1.

Related: #2512

Co-Authored-By: Codex GPT-5 <noreply@openai.com>
@bnasslahsen
bnasslahsen merged commit 356de26 into springdoc:main Sep 6, 2026
1 check passed
bnasslahsen pushed a commit that referenced this pull request Sep 6, 2026
JsonNullable<T> now renders as the wrapped value, nullable unless a non-null
constraint applies, and no longer becomes required merely because such a
constraint is present - the wrapper exists precisely to tell an omitted property
apart from an explicit null. The converter is registered only when
jackson-databind-nullable is on the classpath.

Backport of PR #3340. jspecify is not on this line's test classpath, so the
fixture declares its own TYPE_USE @nullable; nullability is matched by simple
name, so the behaviour under test is unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.

2 participants