#288 - Polishing.

Moved RenderSingleLinks enum into HalConfiguration. Simplified HalConfiguration setup by moving the default into the class. The lookup of a user-provided HalConfiguration is now handled on the bean name level to avoid premature initialization of a potentially defined bean. Formatting.

Original pull request: #295
Related issues: #291
This commit is contained in:
Oliver Gierke
2017-10-13 14:32:29 +02:00
parent 5eee30127d
commit d5e719825f
7 changed files with 59 additions and 84 deletions

View File

@@ -15,21 +15,34 @@
*/
package org.springframework.hateoas.hal;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Wither;
import org.springframework.hateoas.HypermediaConfiguration;
import org.springframework.hateoas.RenderSingleLinks;
import org.springframework.hateoas.Link;
/**
* @author Greg Turnquist
* @author Oliver Gierke
*/
@AllArgsConstructor
@NoArgsConstructor
public class HalConfiguration implements HypermediaConfiguration {
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class HalConfiguration {
private @Wither @Getter @Setter RenderSingleLinks renderSingleLinks;
private @Wither @Getter RenderSingleLinks renderSingleLinks = RenderSingleLinks.AS_SINGLE;
public enum RenderSingleLinks {
/**
* A single {@link Link} is rendered as a JSON object.
*/
AS_SINGLE,
/**
* A single {@link Link} is rendered as a JSON Array.
*/
AS_ARRAY
}
}

View File

@@ -32,10 +32,10 @@ import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.hateoas.Link;
import org.springframework.hateoas.Links;
import org.springframework.hateoas.RelProvider;
import org.springframework.hateoas.RenderSingleLinks;
import org.springframework.hateoas.Resource;
import org.springframework.hateoas.ResourceSupport;
import org.springframework.hateoas.Resources;
import org.springframework.hateoas.hal.HalConfiguration.RenderSingleLinks;
import org.springframework.util.Assert;
import com.fasterxml.jackson.annotation.JsonInclude;
@@ -126,7 +126,8 @@ public class Jackson2HalModule extends SimpleModule {
private final MessageSourceAccessor accessor;
private final HalConfiguration halConfiguration;
public HalLinkListSerializer(CurieProvider curieProvider, EmbeddedMapper mapper, MessageSourceAccessor accessor, HalConfiguration halConfiguration) {
public HalLinkListSerializer(CurieProvider curieProvider, EmbeddedMapper mapper, MessageSourceAccessor accessor,
HalConfiguration halConfiguration) {
this(null, curieProvider, mapper, accessor, halConfiguration);
}
@@ -201,7 +202,8 @@ public class Jackson2HalModule extends SimpleModule {
JavaType mapType = typeFactory.constructMapType(HashMap.class, keyType, valueType);
MapSerializer serializer = MapSerializer.construct(new String[] {}, mapType, true, null,
provider.findKeySerializer(keyType, null), new OptionalListJackson2Serializer(property, halConfiguration), null);
provider.findKeySerializer(keyType, null), new OptionalListJackson2Serializer(property, halConfiguration),
null);
serializer.serialize(sortedLinks, jgen, provider);
}
@@ -430,8 +432,7 @@ public class Jackson2HalModule extends SimpleModule {
* @see com.fasterxml.jackson.databind.ser.std.StdSerializer#serialize(java.lang.Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)
*/
@Override
public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider)
throws IOException {
public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
List<?> list = (List<?>) value;
@@ -695,12 +696,14 @@ public class Jackson2HalModule extends SimpleModule {
this(provider, curieProvider, accessor, true, beanFactory, halConfiguration);
}
public HalHandlerInstantiator(RelProvider provider, CurieProvider curieProvider, MessageSourceAccessor messageSourceAccessor, AutowireCapableBeanFactory beanFactory) {
public HalHandlerInstantiator(RelProvider provider, CurieProvider curieProvider,
MessageSourceAccessor messageSourceAccessor, AutowireCapableBeanFactory beanFactory) {
this(provider, curieProvider, messageSourceAccessor, beanFactory, beanFactory.getBean(HalConfiguration.class));
}
public HalHandlerInstantiator(RelProvider provider, CurieProvider curieProvider, MessageSourceAccessor messageSourceAccessor) {
this(provider, curieProvider, messageSourceAccessor, new HalConfiguration().withRenderSingleLinks(RenderSingleLinks.AS_SINGLE));
public HalHandlerInstantiator(RelProvider provider, CurieProvider curieProvider,
MessageSourceAccessor messageSourceAccessor) {
this(provider, curieProvider, messageSourceAccessor, new HalConfiguration());
}
/**
@@ -743,7 +746,8 @@ public class Jackson2HalModule extends SimpleModule {
this.delegate = delegate;
this.serializers.put(HalResourcesSerializer.class, new HalResourcesSerializer(mapper));
this.serializers.put(HalLinkListSerializer.class, new HalLinkListSerializer(curieProvider, mapper, accessor, halConfiguration));
this.serializers.put(HalLinkListSerializer.class,
new HalLinkListSerializer(curieProvider, mapper, accessor, halConfiguration));
}
/*