versions = instances.stream()
.map(Instance::getBuildVersion)
.filter(Objects::nonNull)
diff --git a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/IntervalCheck.java b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/IntervalCheck.java
index ff82aa27667..42e4f7e21c3 100644
--- a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/IntervalCheck.java
+++ b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/IntervalCheck.java
@@ -28,8 +28,8 @@
import lombok.NonNull;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
+import org.jspecify.annotations.Nullable;
import org.reactivestreams.Publisher;
-import org.springframework.lang.Nullable;
import reactor.core.Disposable;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@@ -65,11 +65,9 @@ public class IntervalCheck {
@Setter
private Duration minRetention;
- @Nullable
- private Disposable subscription;
+ @Nullable private Disposable subscription;
- @Nullable
- private Scheduler scheduler;
+ @Nullable private Scheduler scheduler;
@Setter
@NonNull
diff --git a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/endpoints/package-info.java b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/endpoints/package-info.java
index 518babf8b25..38739733402 100644
--- a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/endpoints/package-info.java
+++ b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/endpoints/package-info.java
@@ -16,9 +16,7 @@
// Spring Boot Admin Server - endpoints package.
-@NonNullApi
-@NonNullFields
+@NullMarked
package de.codecentric.boot.admin.server.services.endpoints;
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
+import org.jspecify.annotations.NullMarked;
diff --git a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/package-info.java b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/package-info.java
index e84645fb3b0..f583cb1cb0e 100644
--- a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/package-info.java
+++ b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/services/package-info.java
@@ -16,9 +16,7 @@
// Spring Boot Admin Server - services package.
-@NonNullApi
-@NonNullFields
+@NullMarked
package de.codecentric.boot.admin.server.services;
-import org.springframework.lang.NonNullApi;
-import org.springframework.lang.NonNullFields;
+import org.jspecify.annotations.NullMarked;
diff --git a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/AdminServerModule.java b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/AdminServerModule.java
index af70cf35e8d..163f8edbe40 100644
--- a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/AdminServerModule.java
+++ b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/AdminServerModule.java
@@ -16,7 +16,7 @@
package de.codecentric.boot.admin.server.utils.jackson;
-import com.fasterxml.jackson.databind.module.SimpleModule;
+import tools.jackson.databind.module.SimpleModule;
import de.codecentric.boot.admin.server.domain.events.InstanceDeregisteredEvent;
import de.codecentric.boot.admin.server.domain.events.InstanceEndpointsDetectedEvent;
@@ -28,7 +28,6 @@
import de.codecentric.boot.admin.server.domain.values.BuildVersion;
import de.codecentric.boot.admin.server.domain.values.Endpoint;
import de.codecentric.boot.admin.server.domain.values.Endpoints;
-import de.codecentric.boot.admin.server.domain.values.Info;
import de.codecentric.boot.admin.server.domain.values.InstanceId;
import de.codecentric.boot.admin.server.domain.values.Registration;
import de.codecentric.boot.admin.server.domain.values.StatusInfo;
@@ -36,11 +35,10 @@
/**
* Jackson module for Spring Boot Admin Server.
- * In order to use this module just add these modules into your ObjectMapper
- * configuration.
- * ObjectMapper mapper = new ObjectMapper();
- * mapper.registerModule(new AdminServerModule());
- * mapper.registerModule(new JavaTimeModule());
+ * To use this module, add it to your JsonMapper builder:
+ * JsonMapper.Builder builder = JsonMapper.builder();
+ * builder.addModule(new AdminServerModule(...));
+ * return builder.build();
*
*
* @author Stefan Rempfer
@@ -69,7 +67,6 @@ public AdminServerModule(String[] metadataKeyPatterns) {
setMixInAnnotation(BuildVersion.class, BuildVersionMixin.class);
setMixInAnnotation(Endpoint.class, EndpointMixin.class);
setMixInAnnotation(Endpoints.class, EndpointsMixin.class);
- setMixInAnnotation(Info.class, InfoMixin.class);
setMixInAnnotation(InstanceId.class, InstanceIdMixin.class);
setMixInAnnotation(StatusInfo.class, StatusInfoMixin.class);
setMixInAnnotation(Tags.class, TagsMixin.class);
diff --git a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/EndpointsMixin.java b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/EndpointsMixin.java
index 7f06363ce22..84a872e5e32 100644
--- a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/EndpointsMixin.java
+++ b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/EndpointsMixin.java
@@ -19,7 +19,7 @@
import java.util.Collection;
import com.fasterxml.jackson.annotation.JsonCreator;
-import org.springframework.lang.Nullable;
+import org.jspecify.annotations.Nullable;
import de.codecentric.boot.admin.server.domain.values.Endpoint;
import de.codecentric.boot.admin.server.domain.values.Endpoints;
diff --git a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/InfoMixin.java b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/InfoMixin.java
index 93ad5e61556..09363700048 100644
--- a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/InfoMixin.java
+++ b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/InfoMixin.java
@@ -16,11 +16,12 @@
package de.codecentric.boot.admin.server.utils.jackson;
+import java.util.LinkedHashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import org.springframework.lang.Nullable;
+import com.fasterxml.jackson.annotation.JsonAnySetter;
+import tools.jackson.databind.annotation.JsonDeserialize;
import de.codecentric.boot.admin.server.domain.values.Info;
@@ -29,14 +30,26 @@
*
* @author Stefan Rempfer
*/
+@JsonDeserialize(builder = InfoMixin.Builder.class)
public abstract class InfoMixin {
- @JsonCreator
- public static Info from(@Nullable Map values) {
- return Info.from(values);
- }
-
@JsonAnyGetter
public abstract Map getValues();
+ public static class Builder {
+
+ private final Map values = new LinkedHashMap<>();
+
+ @JsonAnySetter
+ public Builder set(String key, Object value) {
+ this.values.put(key, value);
+ return this;
+ }
+
+ public Info build() {
+ return Info.from(this.values);
+ }
+
+ }
+
}
diff --git a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/RegistrationBeanSerializerModifier.java b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/RegistrationBeanSerializerModifier.java
index 977fb8e26d5..1bfd9222535 100644
--- a/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/RegistrationBeanSerializerModifier.java
+++ b/spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/utils/jackson/RegistrationBeanSerializerModifier.java
@@ -18,25 +18,25 @@
import java.util.List;
-import com.fasterxml.jackson.databind.BeanDescription;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializationConfig;
-import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
-import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
+import tools.jackson.databind.BeanDescription;
+import tools.jackson.databind.SerializationConfig;
+import tools.jackson.databind.ValueSerializer;
+import tools.jackson.databind.ser.BeanPropertyWriter;
+import tools.jackson.databind.ser.ValueSerializerModifier;
import de.codecentric.boot.admin.server.domain.values.Registration;
-public class RegistrationBeanSerializerModifier extends BeanSerializerModifier {
+public class RegistrationBeanSerializerModifier extends ValueSerializerModifier {
- private final JsonSerializer