feat(kotlin)!: generate against Jackson 3 and Spring Boot 4 - #25
Merged
Conversation
The Brevo client was generated with useSpringBoot3/Jackson 2 while its primary
consumer, ESA-Blueshell/website, runs Spring Boot 4 with Jackson 3 and a shared
tools.jackson JsonMapper bean. Consuming this client there meant carrying two
Jackson majors on the classpath and being unable to hand it the application's
own mapper.
openapi-generator supports Jackson 3 for the kotlin jvm-spring-restclient
library behind useJackson3 + useSpringBoot4, so the generated Serializer now
builds a tools.jackson JsonMapper and the generated constructor wires it with
configureMessageConverters { registerDefaults().withJsonConverter(..) }.
That last detail removes a real bug rather than just moving a version. Under
Jackson 2 the generated constructor appended its converter, so Spring's own
default JSON converter stayed in front and the NON_ABSENT mapper never ran --
every request carried an explicit null for each unset field, which on a Discord
PATCH means "clear this field". The hand-written factory now mirrors the
generated setup instead of working around it.
Annotations stay on the com.fasterxml.jackson.annotation coordinate, where
Jackson 3 left them, with the version managed by the Jackson 3 BOM. Pinning it
by hand is what broke the first attempt: the BOM at 3.1.0 wants annotations
2.x, and 2.22.2 was never published.
BREAKING CHANGE: the client now requires Spring 7 / Spring Boot 4 and Jackson 3
(tools.jackson). Consumers on Spring Boot 3 or Jackson 2 must stay on the
previous release.
Merged
github-actions Bot
added a commit
that referenced
this pull request
Sep 2, 2026
🤖 I have created a release *beep* *boop* --- <details><summary>1.0.0</summary> ## [1.0.0](v0.2.4...v1.0.0) (2026-09-02) ### ⚠ BREAKING CHANGES * **kotlin:** generate against Jackson 3 and Spring Boot 4 ([#25](#25)) ### Features * generated Brevo clients with spec-derived versioning ([fb81701](fb81701)) * **kotlin:** generate against Jackson 3 and Spring Boot 4 ([#25](#25)) ([db41203](db41203)) ### Bug Fixes * **ci:** pin release-please-action to v4, releases are broken on v5 ([#20](#20)) ([5495f38](5495f38)) * **ci:** stop creating workflow runs that cannot execute, and verify releases properly ([#18](#18)) ([f28d49d](f28d49d)) * **ci:** take the release pull request number from release-please ([#14](#14)) ([5902f9f](5902f9f)) * **deps:** raise axios, yaml and js-yaml above known advisories ([fc2537b](fc2537b)) ### Documentation * describe the unattended release chain and its one gap ([#12](#12)) ([fdf4e58](fdf4e58)) ### Build and Dependencies * **deps-dev:** bump @types/node from 24.9.2 to 26.3.0 in /typescript ([#6](#6)) ([6e0c7d8](6e0c7d8)) * **deps-dev:** bump typescript from 5.9.3 to 6.0.3 in /typescript ([#19](#19)) ([e62663f](e62663f)) * **deps:** bump actions/checkout from 5.0.0 to 7.0.1 ([#9](#9)) ([fc41142](fc41142)) * **deps:** bump actions/dependency-review-action from 4.7.2 to 5.0.0 ([#11](#11)) ([ee9474a](ee9474a)) * **deps:** bump actions/setup-node from 6.0.0 to 7.0.0 ([#10](#10)) ([7a06984](7a06984)) * **deps:** bump actions/upload-artifact from 4.6.2 to 7.0.1 ([#21](#21)) ([859cd79](859cd79)) * **deps:** bump googleapis/release-please-action from 4.2.0 to 5.0.0 ([#8](#8)) ([ea8555b](ea8555b)) * **deps:** bump gradle/actions/setup-gradle from 4.4.1 to 6.3.0 ([#22](#22)) ([376e7d5](376e7d5)) * **deps:** bump the actions group with 4 updates ([#7](#7)) ([3d6fefc](3d6fefc)) * **deps:** Bump the gradle group in /kotlin with 5 updates ([#2](#2)) ([3a408dc](3a408dc)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.
Aligns the client with its primary consumer.
ESA-Blueshell/websiteruns Spring Boot 4 with Jackson 3 and a sharedtools.jacksonJsonMapperbean; this client was generated for Spring Boot 3 and Jackson 2, so consuming it there meant two Jackson majors on the classpath and no way to pass the application's own mapper in.openapi-generator supports Jackson 3 for
kotlin/jvm-spring-restclientbehinduseJackson3+useSpringBoot4.This also removes a real bug. Under Jackson 2 the generated constructor appended its converter, so Spring's default JSON converter stayed in front and the
NON_ABSENTmapper never ran — every request carried an explicitnullfor each unset field, which on a DiscordPATCHmeans clear this field. Under Jackson 3 the generated constructor usesconfigureMessageConverters { registerDefaults().withJsonConverter(..) }, which replaces it properly, so the hand-written factory now mirrors the generated setup rather than working around it.Annotations stay on
com.fasterxml.jackson.annotationwith the version managed by the Jackson 3 BOM — pinning it by hand broke the first attempt, since the BOM at 3.1.0 wants annotations 2.x and2.22.2was never published.