Skip to content

Commit 2b65fd7

Browse files
committed
fix-1641: fix deserialization
Signed-off-by: wind57 <[email protected]>
1 parent e5de9db commit 2b65fd7

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/DefaultKubernetesServiceInstance.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package org.springframework.cloud.kubernetes.commons.discovery;
1818

19+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
20+
1921
import java.io.Serializable;
2022
import java.net.URI;
2123
import java.util.Map;
@@ -35,6 +37,7 @@
3537
* @param namespace the namespace of the service.
3638
* @param cluster the cluster the service resides in.
3739
*/
40+
@JsonIgnoreProperties(ignoreUnknown = true)
3841
public record DefaultKubernetesServiceInstance(String instanceId, String serviceId, String host, int port,
3942
Map<String, String> metadata, boolean secure, String namespace, String cluster,
4043
Map<String, Map<String, String>> podMetadata) implements KubernetesServiceInstance, Serializable {

spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/discovery/ServiceInstanceSerializationTests.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.junit.jupiter.api.Test;
2424

2525
import org.springframework.boot.test.json.BasicJsonTester;
26+
import org.springframework.cloud.client.ServiceInstance;
2627

2728
import static org.assertj.core.api.Assertions.assertThat;
2829

@@ -84,6 +85,44 @@ void defaultKubernetesServiceInstanceSerializationTest() throws JsonProcessingEx
8485
.isEqualTo("https://host:8080");
8586
}
8687

88+
@Test
89+
void defaultKubernetesServiceInstanceDeserializationTest() throws JsonProcessingException {
90+
91+
String serialized = """
92+
{
93+
"instanceId": "instanceId",
94+
"serviceId": "serviceId",
95+
"host": "host",
96+
"port": 8080,
97+
"metadata": {
98+
"k8s_namespace": "spring-k8s"
99+
},
100+
"secure": true,
101+
"namespace": "namespace",
102+
"cluster": "cluster",
103+
"podMetadata": {
104+
"pod_root": {
105+
"pod_key": "pod_value"
106+
}
107+
},
108+
"scheme": "https",
109+
"uri": "https://host:8080"
110+
}
111+
""";
112+
113+
ServiceInstance deserialized =
114+
new ObjectMapper().readValue(serialized, DefaultKubernetesServiceInstance.class);
115+
assertThat(deserialized.getInstanceId()).isEqualTo("instanceId");
116+
assertThat(deserialized.getServiceId()).isEqualTo("serviceId");
117+
assertThat(deserialized.getScheme()).isEqualTo("https");
118+
assertThat(deserialized.getHost()).isEqualTo("host");
119+
assertThat(deserialized.getPort()).isEqualTo(8080);
120+
assertThat(deserialized.getUri().toASCIIString()).isEqualTo("https://host:8080");
121+
assertThat(deserialized.getMetadata()).containsExactlyInAnyOrderEntriesOf(
122+
Map.of("k8s_namespace", "spring-k8s")
123+
);
124+
}
125+
87126
@Test
88127
void externalNameServiceInstanceSerializationTest() throws JsonProcessingException {
89128
KubernetesExternalNameServiceInstance instance = new KubernetesExternalNameServiceInstance("serviceId", "host",

0 commit comments

Comments
 (0)