From 37f2143681e58962b01a96a123d1cee742d0df6c Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Mon, 18 Jan 2021 17:35:58 +0100 Subject: [PATCH] #1436 - Avoid rendering curies if none is available. If CurieProvider.getCurieInformation(Links) returns an empty list of curies, we now don't render curies at all. --- .../hateoas/mediatype/hal/Jackson2HalModule.java | 6 ++++-- .../mediatype/hal/Jackson2HalIntegrationTest.java | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 2 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 317ec3f5..c3666552 100644 --- a/src/main/java/org/springframework/hateoas/mediatype/hal/Jackson2HalModule.java +++ b/src/main/java/org/springframework/hateoas/mediatype/hal/Jackson2HalModule.java @@ -190,9 +190,11 @@ public class Jackson2HalModule extends SimpleModule { if (!skipCuries && prefixingRequired && curiedLinkPresent) { - List curies = new ArrayList<>(curieProvider.getCurieInformation(Links.of(links))); + Collection curies = curieProvider.getCurieInformation(Links.of(links)); - sortedLinks.put(HalLinkRelation.CURIES, curies); + if (!curies.isEmpty()) { + sortedLinks.put(HalLinkRelation.CURIES, new ArrayList<>(curies)); + } } TypeFactory typeFactory = provider.getConfig().getTypeFactory(); 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 6ae7c3af..f2924dba 100755 --- a/src/test/java/org/springframework/hateoas/mediatype/hal/Jackson2HalIntegrationTest.java +++ b/src/test/java/org/springframework/hateoas/mediatype/hal/Jackson2HalIntegrationTest.java @@ -18,6 +18,7 @@ package org.springframework.hateoas.mediatype.hal; import static org.assertj.core.api.Assertions.*; import net.minidev.json.JSONArray; +import net.minidev.json.JSONObject; import java.io.IOException; import java.util.ArrayList; @@ -65,6 +66,7 @@ import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.DocumentContext; import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.Option; +import com.jayway.jsonpath.PathNotFoundException; /** * Integration tests for Jackson 2 HAL integration. @@ -622,6 +624,18 @@ class Jackson2HalIntegrationTest { assertThat(document.read("$._links.curies", JSONArray.class)).isNotEmpty(); } + @Test // #1428 + void doesNotRenderCuriesIfNoneConfigured() throws Exception { + + ObjectMapper mapper = getCuriedObjectMapper(new DefaultCurieProvider(Collections.emptyMap())); + RepresentationModel model = new RepresentationModel<>().add(Link.of("/href", LinkRelation.of("foo:bar"))); + + DocumentContext document = JsonPath.parse(mapper.writeValueAsString(model)); + + assertThatExceptionOfType(PathNotFoundException.class) + .isThrownBy(() -> document.read("$.curies", JSONObject.class)); + } + @Relation(collectionRelation = "someSample") static class SomeSample { @JsonProperty String name;