Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Feature Request: Support @jakarta.annotation.Nonnull #3046

@coding-jj

Description

@coding-jj

Description

Springdoc-openapi does not support the annotation @jakarta.annotation.Nonnull.
There are a lot of NotNull and NonNull annotations (mind letter case) from different issuers, but @jakarta.annotation.Nonnull is the late arrived but official Java solution to mark non null fields.

What is the actual result using OpenAPI

When using a java record with NonNull/NotNull Annotations, springdoc-openapi will not generate a required field for @jakarta.annotation.Nonnull String jakartaAnnotationNonnull

public record HelloWorldJson(
        String message,
        @jakarta.annotation.Nonnull String jakartaAnnotationNonnull,
        @jakarta.validation.constraints.NotNull String jakartaValidationConstraintsNotNull,
        @org.springframework.lang.NonNull  String orgSpringframeworkLangNonNull
) {
}

api-docs.json:

{
  [...]
  "components": {
    "schemas": {
      "HelloWorldJson": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          },
          "jakartaAnnotationNonnull": {
            "type": "string"
          },
          "jakartaValidationConstraintsNotNull": {
            "type": "string"
          },
          "orgSpringframeworkLangNonNull": {
            "type": "string"
          }
        },
        "required": [
          "jakartaValidationConstraintsNotNull",
          "orgSpringframeworkLangNonNull"
        ]
      }
    }
  }
}

Description of the solution

Springdoc-openapi should create a required field for the annotation @jakarta.annotation.Nonnull

As fare as I understand in SchemaUtils.java Line 56 the String "Nonnull" should be added.

Old Line

public static final List<String> ANNOTATIONS_FOR_REQUIRED = Arrays.asList("NotNull", "NonNull", "NotBlank", "NotEmpty")

New Line

public static final List<String> ANNOTATIONS_FOR_REQUIRED = Arrays.asList("NotNull", "NonNull", "Nonnull", "NotBlank", "NotEmpty")

Please unterstand, that it is not possible for me to test my solution. I never worked this deep with Gradle Plugins.

Expected result using OpenAPI

{
  [...]
  "components": {
    "schemas": {
      "HelloWorldJson": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          },
          "jakartaAnnotationNonnull": {
            "type": "string"
          },
          "jakartaValidationConstraintsNotNull": {
            "type": "string"
          },
          "orgSpringframeworkLangNonNull": {
            "type": "string"
          }
        },
        "required": [
          "jakartaAnnotationNonnull",
          "jakartaValidationConstraintsNotNull",
          "orgSpringframeworkLangNonNull"
        ]
      }
    }
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions