#1400 - 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.
This commit is contained in:
Oliver Drotbohm
2020-11-23 13:48:15 +01:00
parent 2271dd718c
commit b507cc5e64
2 changed files with 15 additions and 16 deletions

View File

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

View File

@@ -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, #1400
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;