From 91e17f1196c15e174f041b2f772faf905dc73f99 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Wed, 14 Apr 2021 09:39:31 +0200 Subject: [PATCH] #1516 - Support for NamingBase in property translation for HAL. We now also support the newly NamingBase introduced in Jackson 2.12 as a replacement for PropertyNamingStrategyBase. --- .../hateoas/mediatype/hal/Jackson2HalModule.java | 12 +++++++----- .../mediatype/hal/Jackson2HalIntegrationTest.java | 8 ++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/springframework/hateoas/mediatype/hal/Jackson2HalModule.java b/src/main/java/org/springframework/hateoas/mediatype/hal/Jackson2HalModule.java index d025e12a..b71be708 100644 --- a/src/main/java/org/springframework/hateoas/mediatype/hal/Jackson2HalModule.java +++ b/src/main/java/org/springframework/hateoas/mediatype/hal/Jackson2HalModule.java @@ -53,6 +53,7 @@ import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.PropertyNamingStrategies.NamingBase; import com.fasterxml.jackson.databind.PropertyNamingStrategy.PropertyNamingStrategyBase; import com.fasterxml.jackson.databind.deser.ContextualDeserializer; import com.fasterxml.jackson.databind.deser.std.ContainerDeserializerBase; @@ -843,12 +844,13 @@ public class Jackson2HalModule extends SimpleModule { */ public EmbeddedMapper with(@Nullable PropertyNamingStrategy strategy) { - if (!(strategy instanceof PropertyNamingStrategyBase)) { - return this; - } + Function mapper = strategy instanceof PropertyNamingStrategyBase + ? ((PropertyNamingStrategyBase) strategy)::translate + : strategy instanceof NamingBase ? ((NamingBase) strategy)::translate : null; - return new EmbeddedMapper(relProvider, curieProvider, preferCollectionRels, - ((PropertyNamingStrategyBase) strategy)::translate); + return mapper == null + ? this + : new EmbeddedMapper(relProvider, curieProvider, preferCollectionRels, mapper); } /** diff --git a/src/test/java/org/springframework/hateoas/mediatype/hal/Jackson2HalIntegrationTest.java b/src/test/java/org/springframework/hateoas/mediatype/hal/Jackson2HalIntegrationTest.java index 44306f67..ab5a23c9 100755 --- a/src/test/java/org/springframework/hateoas/mediatype/hal/Jackson2HalIntegrationTest.java +++ b/src/test/java/org/springframework/hateoas/mediatype/hal/Jackson2HalIntegrationTest.java @@ -59,6 +59,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.type.TypeFactory; @@ -643,6 +644,13 @@ class Jackson2HalIntegrationTest { .writeValueAsString(new RepresentationModel<>().add(Link.of("/href"))); } + @Test // #1516 + void considersNamingBase() throws Exception { + + mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE) + .writeValueAsString(new RepresentationModel<>().add(Link.of("/href", "fooBar"))); + } + @Relation(collectionRelation = "someSample") static class SomeSample { @JsonProperty String name;