From 31fd319e4e71fbc40811933cbeb6256578c2414d Mon Sep 17 00:00:00 2001 From: jakub-bochenski Date: Wed, 22 Jan 2025 18:20:00 +0100 Subject: [PATCH] fix: missing context attributes (breaks views) --- .../dataformat/hal/ser/HALBeanSerializer.java | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/openapitools/jackson/dataformat/hal/ser/HALBeanSerializer.java b/src/main/java/io/openapitools/jackson/dataformat/hal/ser/HALBeanSerializer.java index 5d170c3..bcb4295 100755 --- a/src/main/java/io/openapitools/jackson/dataformat/hal/ser/HALBeanSerializer.java +++ b/src/main/java/io/openapitools/jackson/dataformat/hal/ser/HALBeanSerializer.java @@ -4,6 +4,8 @@ import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.core.type.WritableTypeId; import com.fasterxml.jackson.databind.BeanDescription; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.jsontype.TypeSerializer; @@ -16,13 +18,20 @@ import io.openapitools.jackson.dataformat.hal.annotation.Curies; import io.openapitools.jackson.dataformat.hal.annotation.EmbeddedResource; import io.openapitools.jackson.dataformat.hal.annotation.Link; -import java.io.IOException; -import java.util.*; -import java.util.stream.Collectors; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; + /** * Serializer to handle {@link io.openapitools.jackson.dataformat.hal.annotation.Resource} beans ensuring they are serialized according to the HAL * specification. This implies placing links inside the _links property and embedded objects inside the _embedded @@ -200,7 +209,7 @@ public void serialize(Object bean, JsonGenerator jgen, SerializerProvider provid jgen.writeStartObject(); for (String rel : links.keySet()) { jgen.writeFieldName(rel); - links.get(rel).serialize(jgen); + links.get(rel).serialize(jgen, provider); } jgen.writeEndObject(); } @@ -285,22 +294,30 @@ public LinkProperty(Collection links) { this.links = links == null ? new HashSet() : links; } - public void serialize(JsonGenerator jgen) throws IOException { + public void serialize(JsonGenerator jgen, SerializerProvider provider) throws IOException { if (link != null) { - writeLinkObject(jgen, link); + writeLinkObject(jgen, provider, link); } else if (links != null) { jgen.writeStartArray(); for (HALLink curLink : links) { - writeLinkObject(jgen, curLink); + writeLinkObject(jgen, provider, curLink); } jgen.writeEndArray(); } } - private void writeLinkObject(JsonGenerator jgen, HALLink link) throws IOException { - jgen.writeObject(link); + private void writeLinkObject(JsonGenerator jgen, SerializerProvider provider, HALLink link) throws IOException { + _findSerializer(link, provider).serialize(link, jgen, provider); } + protected JsonSerializer _findSerializer(Object value, SerializerProvider serializers) + throws JsonMappingException + { + // NOTE: will NOT call contextualization + return serializers.findValueSerializer(value.getClass()); + } } + + }