Skip to content

Commit 8580258

Browse files
committed
Use Spring's ObjectMapper for Kubernetes serialization
Configure KubernetesClient to use Spring's auto-configured ObjectMapper. This allows Jackson modules registered in Spring (e.g. jackson-module-kotlin) to be automatically available for Kubernetes resource serialization and deserialization.
1 parent cb7dd9d commit 8580258

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

starter/src/main/java/io/javaoperatorsdk/operator/springboot/starter/OperatorAutoConfiguration.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@
1818
import org.springframework.context.annotation.Configuration;
1919
import org.springframework.core.annotation.Order;
2020

21+
import com.fasterxml.jackson.databind.ObjectMapper;
22+
2123
import io.fabric8.kubernetes.client.Config;
2224
import io.fabric8.kubernetes.client.ConfigBuilder;
2325
import io.fabric8.kubernetes.client.KubernetesClient;
2426
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
2527
import io.fabric8.kubernetes.client.http.HttpClient;
28+
import io.fabric8.kubernetes.client.utils.KubernetesSerialization;
2629
import io.fabric8.openshift.client.OpenShiftClient;
2730
import io.javaoperatorsdk.operator.Operator;
2831
import io.javaoperatorsdk.operator.ReconcilerUtils;
@@ -48,20 +51,32 @@ public class OperatorAutoConfiguration {
4851

4952
@Bean
5053
@ConditionalOnMissingBean
51-
public KubernetesClient kubernetesClient(Optional<HttpClient.Factory> httpClientFactory,
54+
public KubernetesClient kubernetesClient(
55+
Optional<ObjectMapper> objectMapper,
56+
Optional<HttpClient.Factory> httpClientFactory,
5257
Config config) {
58+
59+
KubernetesClientBuilder builder = new KubernetesClientBuilder();
60+
61+
if (objectMapper.isPresent()) {
62+
// Use Spring's ObjectMapper to create KubernetesSerialization
63+
// This ensures any Jackson modules registered in Spring (like Kotlin module) are available
64+
KubernetesSerialization serialization = new KubernetesSerialization(objectMapper.get(), true);
65+
builder.withKubernetesSerialization(serialization);
66+
}
67+
5368
return configuration.getClient().isOpenshift()
5469
? httpClientFactory
55-
.map(it -> new KubernetesClientBuilder().withHttpClientFactory(it).withConfig(config)
70+
.map(it -> builder.withHttpClientFactory(it).withConfig(config)
5671
.build().adapt(OpenShiftClient.class))
5772
// new DefaultOpenShiftClient(it.createHttpClient(config),
5873
// new OpenShiftConfig(config)))
59-
.orElseGet(() -> new KubernetesClientBuilder().withConfig(config)
74+
.orElseGet(() -> builder.withConfig(config)
6075
.build().adapt(OpenShiftClient.class))
6176
: httpClientFactory
62-
.map(it -> new KubernetesClientBuilder().withHttpClientFactory(it).withConfig(config)
77+
.map(it -> builder.withHttpClientFactory(it).withConfig(config)
6378
.build())
64-
.orElseGet(() -> new KubernetesClientBuilder().withConfig(config)
79+
.orElseGet(() -> builder.withConfig(config)
6580
.build());
6681
}
6782

0 commit comments

Comments
 (0)