[MODLISTS-229] Spring Boot 4.0 and friends updates#278
Merged
ncovercash merged 1 commit intomasterfrom Mar 9, 2026
Merged
Conversation
50fe780 to
c093180
Compare
ncovercash
commented
Mar 6, 2026
| <useSpringBoot3>true</useSpringBoot3> | ||
| <useSpringBoot4>true</useSpringBoot4> | ||
| <useJackson3>true</useJackson3> | ||
| <openApiNullable>false</openApiNullable> |
Member
Author
There was a problem hiding this comment.
this defaults to true, but with SB v4 we want Jackson v3's nullable implementations instead (I don't think we ever use it, but the generator gets mad if useJackson3 and openApiNullable are both true)
|
mweaver-ebsco
approved these changes
Mar 9, 2026
bvsharp
approved these changes
Mar 9, 2026
ncovercash
added a commit
that referenced
this pull request
Mar 9, 2026
This reverts commit b936b47.
ncovercash
added a commit
that referenced
this pull request
Mar 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



A lot happened here! I'll detail the main changes here since the PR is cumbersome to scroll through.
Spring Boot 4.0 / Spring 7.0 / Jackson 3.0 update
The whole reason we're in this mess...
Updated OpenAPI generation for new annotations, configuration
openapi-generatorrequired updates and some additional parameters to use Spring Boot v4 annotations, Jackson 3, etc. While updating these, I also changed the following:java8option — this doesn't exist, at least not for several major versions;dateLibrary=javaoption:dateLibrary=legacyand giving us the grossjava.util.Date,dateLibrary=java8, which providesOffsetDateTimeand all the other time classes we know and love, anddateLibrary=java8is now the default, we don't need to override it[CONTROVERSIAL]
I found and enabled
useOptionalas part of a lot of debugging (issues with request validation insisting parameters were required that have since been resolved), but I kind of like the idea of keeping it enabled. Even if we're immediately resolving it inside the controller, it at least provides some reminder to the dev that it's nullable and should be treated as such (beyond a@Nullablehidden inside the generated API interface that we won't ever see).Let me know what y'all think, though? If we don't want to add this, we can easily revert it.
Migrated from spring-retry to the new built-in retry logic
This created a fair amount of noise as the giant wall of logic from
CustomTenantServicegot shifted to the callee inMigrationService. Fortunately, it is a lot cleaner with the declarative style!Removed
folio-spring-system-userOkapi is gone, and with it goes the need for handling system users within our module! This let us clean up quite a bit:
Instead, we have a new
RunAsSystemUserService(slimmed version of the originalfolio-spring-system-user'sSystemUserScopedExecutionService) that creates the necessary context and runs given code in it. This makes system user execution as simple asrunAsSystemUserService.executeSystemUserScoped(tenant, () -> myClient.doSomething())!Migrated from Feign to Spring HttpClient
For some reason we were using
@RequestHeaderon all our path parameters...oops. Surprised we didn't have any issues with that using Feign, but all that's cleaned up now. Feign clients are now HttpClients and beanified in a centralHttpClientConfiguration.Improved exception logging
Convenience that I added while debugging:
ListExceptionHandlernow logs the entire traceback and nested causes for exceptions instead of just the message.Removed unused
folio-service-tools-spring-*dependenciesThese were never used and carried in from the initial commit.
Additional dev dep bumps
No major or breaking changes here