From 568b78d96d688dbb69c509821ccd07769e108ae8 Mon Sep 17 00:00:00 2001 From: Dmitry Sulman Date: Wed, 13 May 2026 18:25:12 +0300 Subject: [PATCH] Order kotlinxJsonCodecCustomizer so user-provided customizer can go after it Signed-off-by: Dmitry Sulman --- .../codec/autoconfigure/CodecsAutoConfiguration.java | 1 + .../autoconfigure/CodecsAutoConfigurationTests.java | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/module/spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfiguration.java b/module/spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfiguration.java index a0e71cac86a0..7adbd5222219 100644 --- a/module/spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfiguration.java +++ b/module/spring-boot-http-codec/src/main/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfiguration.java @@ -103,6 +103,7 @@ CodecCustomizer jackson2CodecCustomizer(ObjectMapper objectMapper) { static class KotlinxSerializationJsonCodecConfiguration { @Bean + @Order(0) @ConditionalOnBean(Json.class) CodecCustomizer kotlinxJsonCodecCustomizer(Json json, ResourceLoader resourceLoader) { ClassLoader classLoader = resourceLoader.getClassLoader(); diff --git a/module/spring-boot-http-codec/src/test/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfigurationTests.java b/module/spring-boot-http-codec/src/test/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfigurationTests.java index 4e58f4404ad9..92291ddbfe3b 100644 --- a/module/spring-boot-http-codec/src/test/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfigurationTests.java +++ b/module/spring-boot-http-codec/src/test/java/org/springframework/boot/http/codec/autoconfigure/CodecsAutoConfigurationTests.java @@ -159,6 +159,16 @@ void kotlinSerializationUsesUnrestrictedPredicateWhenNoOtherJsonConverterIsAvail }); } + @Test + void userProvidedCustomizerCanOverrideKotlinxJsonCodecCustomizer() { + this.contextRunner.withUserConfiguration(KotlinxJsonConfiguration.class, CodecCustomizerConfiguration.class) + .run((context) -> { + List codecCustomizers = context.getBean(CodecCustomizers.class).codecCustomizers; + assertThat(codecCustomizers).hasSize(3); + assertThat(codecCustomizers.get(2)).isInstanceOf(TestCodecCustomizer.class); + }); + } + @SuppressWarnings("unchecked") private T findEncoder(AssertableApplicationContext context, Class encoderClass) { ServerCodecConfigurer configurer = ServerCodecConfigurer.create();