From cc5ca13aeb5f4d3122b69df877e2296280a1bb3f Mon Sep 17 00:00:00 2001 From: Stefan Kalscheuer Date: Sun, 13 Apr 2025 10:49:42 +0200 Subject: [PATCH] refactor: use builder to instantiate ObjectMapper (#95) Instead of applying configuration to a new ObjectMapper instance we use the JsonMapper builder pattern to create our mapper. The resulting mappers are not yet fully immutable, but the old way will be removed in Jackson 3.0. --- .../jvault/connector/internal/RequestHelper.java | 11 ++++++----- .../connector/model/response/SecretResponse.java | 9 +++++---- .../jvault/connector/model/AbstractModelTest.java | 10 ++++++---- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/stklcode/jvault/connector/internal/RequestHelper.java b/src/main/java/de/stklcode/jvault/connector/internal/RequestHelper.java index 1b4df5c..b49942a 100644 --- a/src/main/java/de/stklcode/jvault/connector/internal/RequestHelper.java +++ b/src/main/java/de/stklcode/jvault/connector/internal/RequestHelper.java @@ -2,8 +2,8 @@ package de.stklcode.jvault.connector.internal; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import de.stklcode.jvault.connector.exception.*; import de.stklcode.jvault.connector.model.response.ErrorResponse; @@ -44,7 +44,7 @@ public final class RequestHelper implements Serializable { private final int retries; // Number of retries on 5xx errors. private final String tlsVersion; // TLS version (#22). private final X509Certificate trustedCaCert; // Trusted CA certificate. - private final ObjectMapper jsonMapper; + private final JsonMapper jsonMapper; /** * Constructor of the request helper. @@ -65,10 +65,11 @@ public final class RequestHelper implements Serializable { this.timeout = timeout; this.tlsVersion = tlsVersion; this.trustedCaCert = trustedCaCert; - this.jsonMapper = new ObjectMapper() - .registerModule(new JavaTimeModule()) + this.jsonMapper = JsonMapper.builder() + .addModule(new JavaTimeModule()) .enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); + .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE) + .build(); } /** diff --git a/src/main/java/de/stklcode/jvault/connector/model/response/SecretResponse.java b/src/main/java/de/stklcode/jvault/connector/model/response/SecretResponse.java index 705b953..b21bb92 100644 --- a/src/main/java/de/stklcode/jvault/connector/model/response/SecretResponse.java +++ b/src/main/java/de/stklcode/jvault/connector/model/response/SecretResponse.java @@ -18,8 +18,8 @@ package de.stklcode.jvault.connector.model.response; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import de.stklcode.jvault.connector.exception.InvalidResponseException; import de.stklcode.jvault.connector.model.response.embedded.VersionMetadata; @@ -85,10 +85,11 @@ public abstract class SecretResponse extends VaultDataResponse { } else if (type.isInstance(rawValue)) { return type.cast(rawValue); } else { - var om = new ObjectMapper() - .registerModule(new JavaTimeModule()) + var om = JsonMapper.builder() + .addModule(new JavaTimeModule()) .enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); + .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE) + .build(); if (rawValue instanceof String) { return om.readValue((String) rawValue, type); diff --git a/src/test/java/de/stklcode/jvault/connector/model/AbstractModelTest.java b/src/test/java/de/stklcode/jvault/connector/model/AbstractModelTest.java index 2974339..9df534d 100644 --- a/src/test/java/de/stklcode/jvault/connector/model/AbstractModelTest.java +++ b/src/test/java/de/stklcode/jvault/connector/model/AbstractModelTest.java @@ -3,6 +3,7 @@ package de.stklcode.jvault.connector.model; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import nl.jqno.equalsverifier.EqualsVerifier; import org.junit.jupiter.api.Test; @@ -29,10 +30,11 @@ public abstract class AbstractModelTest { */ protected AbstractModelTest(Class modelClass) { this.modelClass = modelClass; - this.objectMapper = new ObjectMapper() - .registerModule(new JavaTimeModule()) - .enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE); + this.objectMapper = JsonMapper.builder() + .addModule(new JavaTimeModule()) + .enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE) + .build(); } /**