From fc9d2a6777e0d3c8775d62c0d260727e7a450b91 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Mon, 23 Nov 2020 13:48:15 +0100 Subject: [PATCH] #1399 - Make sure curie information is rendered for pre-curied links. We previously didn't render the curie information if the process of curying didn't actually change the link relation if it was already given in a curied form. We now check preprocessed link relation for a curie and include the curie information if we find a curie. --- .../mediatype/hal/Jackson2HalModule.java | 19 +++---------------- .../hal/Jackson2HalIntegrationTest.java | 12 ++++++++++++ 2 files changed, 15 insertions(+), 16 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 76eab5d8..fb7bfc43 100644 --- a/src/main/java/org/springframework/hateoas/mediatype/hal/Jackson2HalModule.java +++ b/src/main/java/org/springframework/hateoas/mediatype/hal/Jackson2HalModule.java @@ -49,20 +49,8 @@ import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.core.Version; -import com.fasterxml.jackson.databind.BeanProperty; -import com.fasterxml.jackson.databind.DeserializationConfig; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.JsonDeserializer; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.KeyDeserializer; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.PropertyNamingStrategy.PropertyNamingStrategyBase; -import com.fasterxml.jackson.databind.SerializationConfig; -import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.cfg.HandlerInstantiator; import com.fasterxml.jackson.databind.cfg.MapperConfig; import com.fasterxml.jackson.databind.deser.ContextualDeserializer; @@ -187,13 +175,12 @@ public class Jackson2HalModule extends SimpleModule { } LinkRelation rel = prefixingRequired ? curieProvider.getNamespacedRelFrom(link) : link.getRel(); + HalLinkRelation relation = transformingMapper.map(rel); - if (!link.hasRel(rel)) { + if (relation.isCuried()) { curiedLinkPresent = true; } - HalLinkRelation relation = transformingMapper.map(rel); - sortedLinks // .computeIfAbsent(relation, key -> new ArrayList<>())// .add(toHalLink(link, relation)); 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 108914ed..51e88ed8 100755 --- a/src/test/java/org/springframework/hateoas/mediatype/hal/Jackson2HalIntegrationTest.java +++ b/src/test/java/org/springframework/hateoas/mediatype/hal/Jackson2HalIntegrationTest.java @@ -17,6 +17,8 @@ package org.springframework.hateoas.mediatype.hal; import static org.assertj.core.api.Assertions.*; +import net.minidev.json.JSONArray; + import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; @@ -610,6 +612,16 @@ class Jackson2HalIntegrationTest { assertThat(result.getContent().name).isEqualTo("Dave"); } + @Test // #1399 + void rendersCurieInformationIfCuriedLinkIsGiven() throws Exception { + + RepresentationModel model = new RepresentationModel<>().add(Link.of("/href", LinkRelation.of("foo:bar"))); + + DocumentContext document = JsonPath.parse(getCuriedObjectMapper().writeValueAsString(model)); + + assertThat(document.read("$._links.curies", JSONArray.class)).isNotEmpty(); + } + @Relation(collectionRelation = "someSample") static class SomeSample { @JsonProperty String name;