#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.
This commit is contained in:
Oliver Drotbohm
2021-04-14 09:39:31 +02:00
parent e939852362
commit 91e17f1196
2 changed files with 15 additions and 5 deletions

View File

@@ -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<String, String> 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);
}
/**

View File

@@ -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;