#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:
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user