Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: springdoc/springdoc-openapi
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v2.8.5
Choose a base ref
...
head repository: springdoc/springdoc-openapi
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v2.8.6
Choose a head ref

Commits on Feb 16, 2025

  1. [maven-release-plugin] prepare for next development iteration

    jenkins committed Feb 16, 2025
    Copy the full SHA
    165f0eb View commit details

Commits on Feb 19, 2025

  1. Check both SerDe bean definitions for @JsonUnwrapped/@Schema

    wingsofovnia committed Feb 19, 2025

    Verified

    This commit was signed with the committer’s verified signature. The key has expired.
    danielleadams Danielle Adams
    Copy the full SHA
    fc0d72a View commit details
  2. format tabs

    wingsofovnia committed Feb 19, 2025

    Verified

    This commit was signed with the committer’s verified signature.
    richardlau Richard Lau
    Copy the full SHA
    6e43467 View commit details

Commits on Feb 20, 2025

  1. Update README.md

    Fixed broken href
    berezkin88 authored Feb 20, 2025

    Verified

    This commit was signed with the committer’s verified signature.
    richardlau Richard Lau
    Copy the full SHA
    d027e7c View commit details
  2. Merge pull request #2911 from berezkin88/patch-1

    Update README.md
    bnasslahsen authored Feb 20, 2025

    Verified

    This commit was signed with the committer’s verified signature.
    richardlau Richard Lau
    Copy the full SHA
    70057d0 View commit details

Commits on Feb 25, 2025

  1. Merge pull request #2909 from wingsofovnia/fix/2879-2

    Check both SerDe `BeanPropertyDefinition` for `@JsonUnwrapped`/`@Schema`
    bnasslahsen authored Feb 25, 2025
    Copy the full SHA
    1536f24 View commit details
  2. Update README.md

    bnasslahsen authored Feb 25, 2025
    Copy the full SHA
    9e89786 View commit details
  3. Update README.md

    bnasslahsen authored Feb 25, 2025
    Copy the full SHA
    a3270f0 View commit details
  4. Update README.md

    bnasslahsen authored Feb 25, 2025
    Copy the full SHA
    23dc5d4 View commit details
  5. Update README.md

    bnasslahsen authored Feb 25, 2025
    Copy the full SHA
    49b3ab7 View commit details

Commits on Mar 1, 2025

  1. swagger-ui upgrade to 5.20.0

    bnasslahsen committed Mar 1, 2025
    Copy the full SHA
    f1a52a7 View commit details
  2. Bail sealed class subtype introspection on Schema or JacksonSubtypes …

    …annotation present
    sahil-ramagiri committed Mar 1, 2025
    Copy the full SHA
    f4bad4d View commit details

Commits on Mar 2, 2025

  1. code review

    bnasslahsen committed Mar 2, 2025
    Copy the full SHA
    4c3c51e View commit details

Commits on Mar 3, 2025

  1. code review

    bnasslahsen committed Mar 3, 2025
    Copy the full SHA
    9d7265e View commit details

Commits on Mar 4, 2025

  1. Add missing builder methods in SchemaBuilder

    JohnNiang committed Mar 4, 2025
    Copy the full SHA
    7a3b957 View commit details
  2. Merge pull request #2927 from sahil-ramagiri/main

    Bail sealed class subtype introspection on Schema
    bnasslahsen authored Mar 4, 2025
    Copy the full SHA
    eed01f3 View commit details

Commits on Mar 20, 2025

  1. swagger-core upgrade to 2.2.29

    bnasslahsen committed Mar 20, 2025
    Copy the full SHA
    50b2fa8 View commit details
  2. Copy the full SHA
    569d4ff View commit details
  3. Merge pull request #2928 from JohnNiang/feat/build-schema-properties

    Add missing builder methods in SchemaBuilder
    bnasslahsen authored Mar 20, 2025
    Copy the full SHA
    e76f8d6 View commit details
  4. spring-cloud-function upgrade to 4.2.2

    bnasslahsen committed Mar 20, 2025
    Copy the full SHA
    4412fd0 View commit details
  5. ModelResolver.enumAsRef = true result in invalid openapi with actuato…

    …r using enum param #2905
    bnasslahsen committed Mar 20, 2025
    Copy the full SHA
    c07093c View commit details

Commits on Mar 22, 2025

  1. Add Future to ignored response wrappers. Fixes #2917.

    bnasslahsen committed Mar 22, 2025
    Copy the full SHA
    65ae8ba View commit details
  2. OpenAPIService serverBaseUrl is not thread safe. Fixes #2931

    bnasslahsen committed Mar 22, 2025
    Copy the full SHA
    c32a017 View commit details
  3. Wrong schema generation with PagedModel generated VIA_DTO and wrapped…

    … in ResponseEntity. Fixes #2933
    bnasslahsen committed Mar 22, 2025
    Copy the full SHA
    7e45bea View commit details
  4. LocalTime, YearMonth, MonthDay are not serialized correctly in ISO 86…

    …01 format. Fixes #2938
    bnasslahsen committed Mar 22, 2025
    Copy the full SHA
    ec43ffb View commit details
  5. Duplicate ModelConverter registration with Spring Boot DevTools. Fixes

    bnasslahsen committed Mar 22, 2025
    Copy the full SHA
    3421305 View commit details
  6. Upgrade spring-boot to version 3.4.4

    bnasslahsen committed Mar 22, 2025
    Copy the full SHA
    e185654 View commit details
  7. SpringBoot native fails /v3/api-docs when using a Map as an http enti…

    …ty field. Fixes #2941
    bnasslahsen committed Mar 22, 2025
    Copy the full SHA
    20e5eec View commit details

Commits on Mar 23, 2025

  1. CHANGELOG.md update for the next release 2.8.6

    bnasslahsen committed Mar 23, 2025
    Copy the full SHA
    c047b12 View commit details
  2. [maven-release-plugin] prepare release v2.8.6

    jenkins committed Mar 23, 2025
    Copy the full SHA
    3cf77ca View commit details
Showing with 3,164 additions and 844 deletions.
  1. +22 −0 CHANGELOG.md
  2. +2 −3 README.md
  3. +6 −6 pom.xml
  4. +1 −1 springdoc-openapi-starter-common/pom.xml
  5. +16 −11 springdoc-openapi-starter-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java
  6. +12 −1 ...openapi-starter-common/src/main/java/org/springdoc/core/configuration/SpringDocConfiguration.java
  7. +14 −0 ...api-starter-common/src/main/java/org/springdoc/core/configuration/SpringDocSealedClassModule.java
  8. +3 −1 ...c-openapi-starter-common/src/main/java/org/springdoc/core/configuration/hints/SpringDocHints.java
  9. +1 −1 ...c-openapi-starter-common/src/main/java/org/springdoc/core/converters/ModelConverterRegistrar.java
  10. +6 −8 ...gdoc-openapi-starter-common/src/main/java/org/springdoc/core/converters/PageOpenAPIConverter.java
  11. +107 −18 ...openapi-starter-common/src/main/java/org/springdoc/core/converters/PolymorphicModelConverter.java
  12. +27 −17 ...napi-starter-common/src/main/java/org/springdoc/core/customizers/ActuatorOperationCustomizer.java
  13. +5 −0 ...mon/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java
  14. +52 −0 ...rter-common/src/main/java/org/springdoc/core/customizers/GlobalOperationComponentsCustomizer.java
  15. +19 −1 ...enapi-starter-common/src/main/java/org/springdoc/core/extractor/MethodParameterPojoExtractor.java
  16. +10 −0 springdoc-openapi-starter-common/src/main/java/org/springdoc/core/fn/builders/parameter/Builder.java
  17. +44 −0 springdoc-openapi-starter-common/src/main/java/org/springdoc/core/fn/builders/schema/Builder.java
  18. +23 −0 ...openapi-starter-common/src/main/java/org/springdoc/core/properties/SpringDocConfigProperties.java
  19. +5 −0 ...gdoc-openapi-starter-common/src/main/java/org/springdoc/core/service/GenericParameterService.java
  20. +6 −11 springdoc-openapi-starter-common/src/main/java/org/springdoc/core/service/OpenAPIService.java
  21. +5 −0 springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/Constants.java
  22. +1 −2 springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/PropertyResolverUtils.java
  23. +57 −0 springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SpringDocUtils.java
  24. +20 −20 springdoc-openapi-starter-common/src/test/java/org/springdoc/api/AbstractOpenApiResourceTest.java
  25. +1 −1 springdoc-openapi-starter-webflux-api/pom.xml
  26. +2 −2 ...-openapi-starter-webflux-api/src/main/java/org/springdoc/webflux/api/OpenApiActuatorResource.java
  27. +6 −6 springdoc-openapi-starter-webflux-api/src/main/java/org/springdoc/webflux/api/OpenApiResource.java
  28. +1 −0 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.0.1/app102.json
  29. +85 −86 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.0.1/app3.json
  30. +19 −20 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.0.1/app5.json
  31. +13 −14 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.0.1/app66.json
  32. +5 −6 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.0.1/app68.json
  33. +1 −2 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.0.1/app72.json
  34. +1 −2 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.0.1/app85.json
  35. +1 −2 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.0.1/app90.json
  36. +2 −1 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.1.0/app102.json
  37. +90 −91 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.1.0/app3.json
  38. +24 −25 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.1.0/app5.json
  39. +18 −19 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.1.0/app66.json
  40. +10 −11 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.1.0/app68.json
  41. +6 −7 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.1.0/app72.json
  42. +6 −7 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.1.0/app85.json
  43. +6 −7 springdoc-openapi-starter-webflux-api/src/test/resources/results/3.1.0/app90.json
  44. +1 −1 springdoc-openapi-starter-webflux-ui/pom.xml
  45. +1 −1 springdoc-openapi-starter-webmvc-api/pom.xml
  46. +7 −6 springdoc-openapi-starter-webmvc-api/src/main/java/org/springdoc/webmvc/api/OpenApiResource.java
  47. +0 −1 ...arter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app115/JavaTimeOperationCustomizer.java
  48. +3 −0 ...enapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app115/SpringDocApp115Test.java
  49. +2 −1 ...enapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app239/SpringDocApp239Test.java
  50. +41 −0 springdoc-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app242/RootModel.java
  51. +35 −0 ...enapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app242/SpringDocApp242Test.java
  52. +15 −0 ...oc-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app242/TestController.java
  53. +14 −0 ...openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app242/UnwrappedModelOne.java
  54. +14 −0 ...openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app242/UnwrappedModelTwo.java
  55. +93 −0 ...c-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app243/HelloController.java
  56. +35 −0 ...enapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app243/SpringDocApp243Test.java
  57. +17 −0 ...enapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app115/SpringDocApp115Test.java
  58. +9 −0 ...c-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app129/HelloController.java
  59. +2 −1 ...enapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app239/SpringDocApp239Test.java
  60. +41 −0 springdoc-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app242/RootModel.java
  61. +35 −0 ...enapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app242/SpringDocApp242Test.java
  62. +15 −0 ...oc-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app242/TestController.java
  63. +14 −0 ...openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app242/UnwrappedModelOne.java
  64. +14 −0 ...openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app242/UnwrappedModelTwo.java
  65. +26 −0 ...c-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app243/HelloController.java
  66. +37 −0 ...enapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app243/SpringDocApp243Test.java
  67. +1 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app102.json
  68. +1 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app105-4.json
  69. +1 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app115.json
  70. +2 −3 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app121.json
  71. +1 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app14.json
  72. +1 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app171-en-GB.json
  73. +1 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app171-en-US.json
  74. +1 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app171-fr-FR.json
  75. +25 −21 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app18.json
  76. +13 −12 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app19.json
  77. +0 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app206.json
  78. +26 −21 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app209.json
  79. +1 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app21.json
  80. +1 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app23.json
  81. +1 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app238-en-US.json
  82. +1 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app238-fr-CA.json
  83. +1 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app238-zh-CN.json
  84. +1 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app24.json
  85. +56 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app242.json
  86. +90 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app243.json
  87. +2 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app102.json
  88. +2 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app105-4.json
  89. +4 −5 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app121.json
  90. +46 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app129.json
  91. +2 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app14.json
  92. +3 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app171-en-GB.json
  93. +2 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app171-en-US.json
  94. +3 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app171-fr-FR.json
  95. +29 −25 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app18.json
  96. +15 −14 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app19.json
  97. +10 −11 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app206.json
  98. +29 −25 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app209.json
  99. +2 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app21.json
  100. +2 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app23.json
  101. +2 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app238-en-US.json
  102. +2 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app238-fr-CA.json
  103. +2 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app238-zh-CN.json
  104. +2 −1 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app24.json
  105. +56 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app242.json
  106. +78 −0 springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app243.json
  107. +1 −1 springdoc-openapi-starter-webmvc-ui/pom.xml
  108. +1 −1 springdoc-openapi-tests/pom.xml
  109. +1 −1 springdoc-openapi-tests/springdoc-openapi-actuator-webflux-tests/pom.xml
  110. +1 −1 springdoc-openapi-tests/springdoc-openapi-actuator-webmvc-tests/pom.xml
  111. +51 −0 ...pi-actuator-webmvc-tests/src/test/java/test/org/springdoc/api/v30/app187/SpringDocApp187Test.java
  112. +894 −0 ...penapi-tests/springdoc-openapi-actuator-webmvc-tests/src/test/resources/results/3.0.1/app187.json
  113. +1 −0 ...enapi-tests/springdoc-openapi-actuator-webmvc-tests/src/test/resources/results/3.0.1/app68-4.json
  114. +2 −1 ...enapi-tests/springdoc-openapi-actuator-webmvc-tests/src/test/resources/results/3.1.0/app68-4.json
  115. +1 −1 springdoc-openapi-tests/springdoc-openapi-data-rest-tests/pom.xml
  116. +4 −2 ...ngdoc-openapi-tests/springdoc-openapi-data-rest-tests/src/test/resources/results/3.0.1/app18.json
  117. +32 −29 ...ngdoc-openapi-tests/springdoc-openapi-data-rest-tests/src/test/resources/results/3.0.1/app23.json
  118. +11 −9 ...ngdoc-openapi-tests/springdoc-openapi-data-rest-tests/src/test/resources/results/3.1.0/app18.json
  119. +44 −41 ...ngdoc-openapi-tests/springdoc-openapi-data-rest-tests/src/test/resources/results/3.1.0/app23.json
  120. +1 −1 springdoc-openapi-tests/springdoc-openapi-function-webflux-tests/pom.xml
  121. +1 −1 springdoc-openapi-tests/springdoc-openapi-function-webmvc-tests/pom.xml
  122. +1 −1 springdoc-openapi-tests/springdoc-openapi-groovy-tests/pom.xml
  123. +1 −1 springdoc-openapi-tests/springdoc-openapi-hateoas-tests/pom.xml
  124. +10 −0 ...ringdoc-openapi-hateoas-tests/src/test/java/test/org/springdoc/api/v30/app10/HelloController.java
  125. +77 −0 ...-openapi-tests/springdoc-openapi-hateoas-tests/src/test/resources/results/3.0.1/app10-direct.json
  126. +45 −0 ...openapi-tests/springdoc-openapi-hateoas-tests/src/test/resources/results/3.0.1/app10-via_dto.json
  127. +1 −1 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/pom.xml
  128. +16 −0 ...oc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v30/app115/SpringDocApp115Test.java
  129. +17 −0 ...oc-openapi-javadoc-tests/src/test/java/test/org/springdoc/api/v31/app115/SpringDocApp115Test.java
  130. +2 −1 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.0.1/app102.json
  131. +7 −6 ...gdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.0.1/app105-4.json
  132. +29 −30 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.0.1/app121.json
  133. +2 −1 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.0.1/app14.json
  134. +29 −25 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.0.1/app18.json
  135. +15 −14 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.0.1/app19.json
  136. +2 −1 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.0.1/app21.json
  137. +2 −1 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.0.1/app23.json
  138. +2 −1 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.0.1/app24.json
  139. +4 −3 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.1.0/app102.json
  140. +8 −7 ...gdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.1.0/app105-4.json
  141. +5 −6 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.1.0/app121.json
  142. +25 −24 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.1.0/app14.json
  143. +34 −30 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.1.0/app18.json
  144. +16 −15 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.1.0/app19.json
  145. +5 −4 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.1.0/app21.json
  146. +3 −2 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.1.0/app23.json
  147. +7 −6 springdoc-openapi-tests/springdoc-openapi-javadoc-tests/src/test/resources/results/3.1.0/app24.json
  148. +1 −1 springdoc-openapi-tests/springdoc-openapi-kotlin-webflux-tests/pom.xml
  149. +1 −1 springdoc-openapi-tests/springdoc-openapi-kotlin-webmvc-tests/pom.xml
  150. +1 −1 springdoc-openapi-tests/springdoc-openapi-security-tests/pom.xml
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -5,12 +5,34 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.8.6] - 2025-03-23

### Added
- #2909 - Check both SerDe BeanPropertyDefinition for @JsonUnwrapped/@Schema
- #2927 - Bail sealed class subtype introspection on Schema
- #2917 - Add Future to ignored response wrappers
- #2938 - Add out of the box support for LocalTime, YearMonth, MonthDay

### Changed
- Upgrade swagger-ui to v5.20.1
- Upgrade swagger-core to 2.2.29
- Upgrade spring-cloud-function to 4.2.2
- Upgrade spring-boot to version 3.4.4

### Fixed
- #2928 - Add missing builder methods in SchemaBuilder
- #2905 - ModelResolver.enumAsRef = true result in invalid openapi with actuator using enum param
- #2939 - Duplicate ModelConverter registration with Spring Boot DevTools
- #2941 - SpringBoot native fails /v3/api-docs when using a Map as an http entity field

## [2.8.5] - 2025-02-16

### Added
- #2696 - Do not require JsonSubType annotation for sealed classes
- #2898 - add needed runtime reflection hints for native image
- #2891 - Refactor trimIndent Method
- #2931 - OpenAPIService serverBaseUrl is not thread safe
- #2933 - Wrong schema generation with PagedModel generated VIA_DTO and wrapped in ResponseEntity

### Changed
- Upgrade swagger-ui to v5.18.3
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -11,8 +11,7 @@ project is now available for organizations that need support beyond 2023.

For more details, feel free to reach out: [sales@springdoc.org](mailto:sales@springdoc.org)

``springdoc-openapi`` is on [Open Collective](https://opencollective.com/springdoc). If you ❤️ this project consider becoming
a [sponsor](https://github.com/sponsors/springdoc).
``springdoc-openapi`` is on [Open Collective](https://opencollective.com/springdoc). If you ❤️ this project consider becoming a [sponsor](https://github.com/sponsors/springdoc).

This project is sponsored by

@@ -33,7 +32,7 @@ This project is sponsored by
<a href="https://www.lvm.de/" target="_blank">
<img src="https://springdoc.org/img/LVM_Versicherung_2010_logo.svg.png" height="10%" width="25%" />
</a>
<a href=""https://gdnext.com/" target="_blank">
<a href="https://gdnext.com/" target="_blank">
<img src="https://springdoc.org/img/gdnext.png" height="10%" width="10%" />
</a>
</p>
12 changes: 6 additions & 6 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi</artifactId>
<version>2.8.5</version>
<version>2.8.6</version>
<packaging>pom</packaging>
<name>Spring openapi documentation</name>
<description>Spring openapi documentation</description>
@@ -11,7 +11,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.2</version>
<version>3.4.4</version>
</parent>

<licenses>
@@ -35,7 +35,7 @@
<connection>scm:git:git@github.com:springdoc/springdoc-openapi.git</connection>
<developerConnection>scm:git:git@github.com:springdoc/springdoc-openapi.git
</developerConnection>
<tag>v2.8.5</tag>
<tag>v2.8.6</tag>
</scm>
<distributionManagement>
<snapshotRepository>
@@ -60,12 +60,12 @@
<maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
<maven-release-plugin.version>2.5.3</maven-release-plugin.version>
<nexus-staging-maven-plugin>1.6.8</nexus-staging-maven-plugin>
<swagger-api.version>2.2.28</swagger-api.version>
<swagger-ui.version>5.18.3</swagger-ui.version>
<swagger-api.version>2.2.29</swagger-api.version>
<swagger-ui.version>5.20.1</swagger-ui.version>
<gmavenplus-plugin.version>1.13.1</gmavenplus-plugin.version>
<jjwt.version>0.9.1</jjwt.version>
<therapi-runtime-javadoc.version>0.15.0</therapi-runtime-javadoc.version>
<spring-cloud-function.version>4.2.1</spring-cloud-function.version>
<spring-cloud-function.version>4.2.2</spring-cloud-function.version>
<spring-security-oauth2-authorization-server.version>1.4.0</spring-security-oauth2-authorization-server.version>
</properties>

2 changes: 1 addition & 1 deletion springdoc-openapi-starter-common/pom.xml
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@
<parent>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi</artifactId>
<version>2.8.5</version>
<version>2.8.6</version>
</parent>
<artifactId>springdoc-openapi-starter-common</artifactId>
<dependencies>
Original file line number Diff line number Diff line change
@@ -86,6 +86,7 @@
import org.slf4j.LoggerFactory;
import org.springdoc.core.annotations.RouterOperations;
import org.springdoc.core.customizers.DataRestRouterOperationCustomizer;
import org.springdoc.core.customizers.GlobalOperationComponentsCustomizer;
import org.springdoc.core.customizers.OpenApiLocaleCustomizer;
import org.springdoc.core.customizers.OperationCustomizer;
import org.springdoc.core.customizers.RouterOperationCustomizer;
@@ -255,7 +256,7 @@ protected AbstractOpenApiResource(String groupName, ObjectFactory<OpenAPIService
}
else {
for (String locale : springDocConfigProperties.getPreLoadingLocales()) {
Executors.newSingleThreadExecutor().execute(() -> this.getOpenApi(Locale.forLanguageTag(locale)));
Executors.newSingleThreadExecutor().execute(() -> this.getOpenApi(null, Locale.forLanguageTag(locale)));
}
}
}
@@ -333,7 +334,7 @@ public static void setModelAndViewClass(Class<?> modelAndViewClass) {
* Gets open api.
*/
private void getOpenApi() {
this.getOpenApi(Locale.getDefault());
this.getOpenApi(null, Locale.getDefault());
}

/**
@@ -342,7 +343,7 @@ private void getOpenApi() {
* @param locale the locale
* @return the open api
*/
protected OpenAPI getOpenApi(Locale locale) {
protected OpenAPI getOpenApi(String serverBaseUrl, Locale locale) {
this.reentrantLock.lock();
try {
final OpenAPI openAPI;
@@ -383,7 +384,7 @@ protected OpenAPI getOpenApi(Locale locale) {
openAPIService.setServersPresent(true);
else
openAPIService.setServersPresent(false);
openAPIService.updateServers(openAPI);
openAPIService.updateServers(serverBaseUrl, openAPI);

if (springDocConfigProperties.isRemoveBrokenReferenceDefinitions())
this.removeBrokenReferenceDefinitions(openAPI);
@@ -412,9 +413,8 @@ protected OpenAPI getOpenApi(Locale locale) {
else {
LOGGER.debug("Fetching openApi document from cache");
openAPI = openAPIService.getCachedOpenAPI(finalLocale);
openAPIService.updateServers(openAPI);
openAPIService.updateServers(serverBaseUrl, openAPI);
}
openAPIService.updateServers(openAPI);
return openAPI;
}
finally {
@@ -427,7 +427,7 @@ private Locale selectLocale(Locale inputLocale) {
if (!CollectionUtils.isEmpty(allowedLocales)) {
Locale bestMatchingAllowedLocale = Locale.lookup(
Locale.LanguageRange.parse(inputLocale.toLanguageTag()),
allowedLocales.stream().map(Locale::forLanguageTag).collect(Collectors.toList())
allowedLocales.stream().map(Locale::forLanguageTag).toList()
);

return bestMatchingAllowedLocale == null ? Locale.forLanguageTag(allowedLocales.get(0)) : bestMatchingAllowedLocale;
@@ -649,7 +649,7 @@ protected void calculatePath(HandlerMethod handlerMethod, RouterOperation router
buildCallbacks(openAPI, methodAttributes, operation, apiCallbacks);

// allow for customisation
operation = customizeOperation(operation, handlerMethod);
operation = customizeOperation(operation, components, handlerMethod);

if (StringUtils.contains(operationPath, "*")) {
Matcher matcher = pathPattern.matcher(operationPath);
@@ -1011,15 +1011,20 @@ protected Set<RequestMethod> getDefaultAllowedHttpMethods() {
* Customise operation.
*
* @param operation the operation
* @param components
* @param handlerMethod the handler method
* @return the operation
*/
protected Operation customizeOperation(Operation operation, HandlerMethod handlerMethod) {
protected Operation customizeOperation(Operation operation, Components components, HandlerMethod handlerMethod) {
Optional<Set<OperationCustomizer>> optionalOperationCustomizers = springDocCustomizers.getOperationCustomizers();
if (optionalOperationCustomizers.isPresent()) {
Set<OperationCustomizer> operationCustomizerList = optionalOperationCustomizers.get();
for (OperationCustomizer operationCustomizer : operationCustomizerList)
operation = operationCustomizer.customize(operation, handlerMethod);
for (OperationCustomizer operationCustomizer : operationCustomizerList) {
if (operationCustomizer instanceof GlobalOperationComponentsCustomizer globalOperationComponentsCustomizer)
operation = globalOperationComponentsCustomizer.customize(operation, components, handlerMethod);
else
operation = operationCustomizer.customize(operation, handlerMethod);
}
}
return operation;
}
Original file line number Diff line number Diff line change
@@ -34,6 +34,7 @@
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Future;

import com.fasterxml.jackson.databind.node.ObjectNode;
import com.querydsl.core.types.Predicate;
@@ -129,6 +130,7 @@
import static org.springdoc.core.utils.Constants.GLOBAL_OPEN_API_CUSTOMIZER;
import static org.springdoc.core.utils.Constants.SPRINGDOC_DEPRECATING_CONVERTER_ENABLED;
import static org.springdoc.core.utils.Constants.SPRINGDOC_ENABLED;
import static org.springdoc.core.utils.Constants.SPRINGDOC_ENABLE_EXTRA_SCHEMAS;
import static org.springdoc.core.utils.Constants.SPRINGDOC_POLYMORPHIC_CONVERTER_ENABLED;
import static org.springdoc.core.utils.Constants.SPRINGDOC_SCHEMA_RESOLVE_PROPERTIES;
import static org.springdoc.core.utils.Constants.SPRINGDOC_SHOW_ACTUATOR;
@@ -153,9 +155,18 @@ public class SpringDocConfiguration {
static {
getConfig().replaceWithSchema(ObjectNode.class, new ObjectSchema())
.replaceWithClass(Charset.class, String.class)
.addResponseWrapperToIgnore(DeferredResult.class);
.addResponseWrapperToIgnore(DeferredResult.class)
.addResponseWrapperToIgnore(Future.class);
}

@Bean
@Lazy(false)
@ConditionalOnProperty(name = SPRINGDOC_ENABLE_EXTRA_SCHEMAS, matchIfMissing = true)
Object initExtraSchemas() {
getConfig().initExtraSchemas();
return null;
}

/**
* Springdoc bean factory post processor bean factory post processor.
*
Original file line number Diff line number Diff line change
@@ -26,10 +26,12 @@
import java.util.Arrays;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.databind.introspect.Annotated;
import com.fasterxml.jackson.databind.jsontype.NamedType;
import com.fasterxml.jackson.databind.module.SimpleModule;
import io.swagger.v3.core.jackson.SwaggerAnnotationIntrospector;
import io.swagger.v3.oas.annotations.media.Schema;

/**
* The type Spring doc sealed class module.
@@ -56,6 +58,18 @@ public List<NamedType> findSubtypes(Annotated annotated) {
&& clazz.isSealed()
&& !clazz.getPackage().getName().startsWith("java")
) {

Schema schema = clazz.getAnnotation(Schema.class);
if (schema != null && schema.oneOf().length > 0) {
return new ArrayList<>();
}

JsonSubTypes jsonSubTypes = clazz.getAnnotation(JsonSubTypes.class);
if (jsonSubTypes != null && jsonSubTypes.value().length > 0) {
return new ArrayList<>();
}


Class<?>[] permittedSubClasses = clazz.getPermittedSubclasses();
if (permittedSubClasses.length > 0) {
Arrays.stream(permittedSubClasses).map(NamedType::new).forEach(subTypes::add);
Original file line number Diff line number Diff line change
@@ -196,7 +196,9 @@ public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
MemberCategory.INVOKE_DECLARED_METHODS))
.registerType(java.lang.ModuleLayer.class, MemberCategory.INVOKE_DECLARED_METHODS)
.registerType(java.lang.module.Configuration.class, MemberCategory.INVOKE_DECLARED_METHODS)
.registerType(java.lang.module.ResolvedModule.class, MemberCategory.INVOKE_DECLARED_METHODS);
.registerType(java.lang.module.ResolvedModule.class, MemberCategory.INVOKE_DECLARED_METHODS)
.registerType(java.lang.invoke.MethodHandles.class, MemberCategory.DECLARED_CLASSES)
.registerType(java.lang.invoke.MethodHandles.Lookup.class);
//swagger-models
Arrays.stream(typesToRegister).forEach(aClass ->
hints.reflection().registerType(aClass,
Original file line number Diff line number Diff line change
@@ -99,6 +99,6 @@ private boolean isSameConverter(ModelConverter modelConverter1, ModelConverter m
// comparing by the converter type
Class<? extends ModelConverter> modelConverter1Class = modelConverter1.getClass();
Class<? extends ModelConverter> modelConverter2Class = modelConverter2.getClass();
return modelConverter1Class.equals(modelConverter2Class);
return modelConverter1Class.getName().equals(modelConverter2Class.getName());
}
}
Original file line number Diff line number Diff line change
@@ -26,7 +26,6 @@

package org.springdoc.core.converters;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Iterator;

@@ -94,7 +93,7 @@ public Schema resolve(AnnotatedType type, ModelConverterContext context, Iterato
Class<?> cls = javaType.getRawClass();
if (replacePageWithPagedModel && PAGE_TO_REPLACE.equals(cls.getCanonicalName())) {
if (!type.isSchemaProperty())
type = resolvePagedModelType(type);
type = resolvePagedModelType(javaType);
else
type.name(getParentTypeName(type, cls));
}
@@ -108,13 +107,12 @@ public Schema resolve(AnnotatedType type, ModelConverterContext context, Iterato
* @param type the type
* @return the annotated type
*/
private AnnotatedType resolvePagedModelType(AnnotatedType type) {
Type pageType = type.getType();
if (pageType instanceof ParameterizedType) {
Type argumentType = ((ParameterizedType) type.getType()).getActualTypeArguments()[0];
private AnnotatedType resolvePagedModelType(JavaType type) {
if(type.hasGenericTypes()){
JavaType innerType = type.containedType(0);
Type pagedModelType = ResolvableType
.forClassWithGenerics(PagedModel.class, ResolvableType.forType(argumentType))
.getType();
.forClassWithGenerics(PagedModel.class, ResolvableType.forType(innerType))
.getType();
return new AnnotatedType(pagedModelType).resolveAsRef(true);
}
else {
Loading