From 22bd76db494f35f1054f0c1447f47f00950dd557 Mon Sep 17 00:00:00 2001 From: Greg Turnquist Date: Tue, 7 Nov 2017 17:54:17 -0600 Subject: [PATCH] #665 - Fix ALPS format. According to the ALPS spec, it's "descriptor" not "descriptors", despite it depicting an array of potentially multiple values. Also fixed the ordering to match as closely as possible all the samples shown in the spec. Original pull request: #666. --- .../org/springframework/hateoas/alps/Alps.java | 5 +++-- .../springframework/hateoas/alps/Descriptor.java | 6 +++++- .../java/org/springframework/hateoas/alps/Doc.java | 4 ++++ .../java/org/springframework/hateoas/alps/Ext.java | 4 ++++ .../org/springframework/hateoas/alps/Format.java | 1 + .../org/springframework/hateoas/alps/Type.java | 1 + .../hateoas/alps/JacksonSerializationTest.java | 5 +++-- .../springframework/hateoas/alps/reference.json | 14 +++++++------- 8 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/springframework/hateoas/alps/Alps.java b/src/main/java/org/springframework/hateoas/alps/Alps.java index 63b7e807..4ec098b2 100644 --- a/src/main/java/org/springframework/hateoas/alps/Alps.java +++ b/src/main/java/org/springframework/hateoas/alps/Alps.java @@ -30,18 +30,19 @@ import com.fasterxml.jackson.annotation.JsonPropertyOrder; * An ALPS document. * * @author Oliver Gierke + * @author Greg Turnquist * @since 0.15 * @see http://alps.io * @see http://alps.io/spec/#prop-alps */ @Value @Builder(builderMethodName = "alps") -@JsonPropertyOrder({"version", "doc", "descriptors"}) +@JsonPropertyOrder({"version", "doc", "descriptor"}) public class Alps { private final String version = "1.0"; private final Doc doc; - private final List descriptors; + private final List descriptor; /** * Returns a new {@link DescriptorBuilder}. diff --git a/src/main/java/org/springframework/hateoas/alps/Descriptor.java b/src/main/java/org/springframework/hateoas/alps/Descriptor.java index 75310976..13a9883e 100644 --- a/src/main/java/org/springframework/hateoas/alps/Descriptor.java +++ b/src/main/java/org/springframework/hateoas/alps/Descriptor.java @@ -20,15 +20,19 @@ import lombok.Value; import java.util.List; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + /** * A value object for an ALPS descriptor. * * @author Oliver Gierke + * @author Greg Turnquist * @since 0.15 * @see http://alps.io/spec/#prop-descriptor */ @Value @Builder +@JsonPropertyOrder({"id", "href", "name", "type", "doc", "descriptor", "ext"}) public class Descriptor { private final String id, href, name; @@ -36,5 +40,5 @@ public class Descriptor { private final Type type; private final Ext ext; private final String rt; - private final List descriptors; + private final List descriptor; } diff --git a/src/main/java/org/springframework/hateoas/alps/Doc.java b/src/main/java/org/springframework/hateoas/alps/Doc.java index 7e942587..a3eaca6d 100644 --- a/src/main/java/org/springframework/hateoas/alps/Doc.java +++ b/src/main/java/org/springframework/hateoas/alps/Doc.java @@ -21,16 +21,20 @@ import lombok.Value; import org.springframework.util.Assert; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + /** * A value object for an ALPS doc element. * * @author Oliver Gierke + * @author Greg Turnquist * @since 0.15 * @see http://alps.io/spec/#prop-doc */ @Value @Builder @AllArgsConstructor +@JsonPropertyOrder({"format", "href", "value"}) public class Doc { private final String href, value; diff --git a/src/main/java/org/springframework/hateoas/alps/Ext.java b/src/main/java/org/springframework/hateoas/alps/Ext.java index ed31ad27..fedc1c11 100644 --- a/src/main/java/org/springframework/hateoas/alps/Ext.java +++ b/src/main/java/org/springframework/hateoas/alps/Ext.java @@ -18,15 +18,19 @@ package org.springframework.hateoas.alps; import lombok.Builder; import lombok.Value; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + /** * A value object for an ALPS ext element. * * @author Oliver Gierke + * @author Greg Turnquist * @since 0.15 * @see http://alps.io/spec/#prop-ext */ @Value @Builder +@JsonPropertyOrder({"id", "href", "value"}) public class Ext { private final String id; diff --git a/src/main/java/org/springframework/hateoas/alps/Format.java b/src/main/java/org/springframework/hateoas/alps/Format.java index 581941b4..5b18e553 100644 --- a/src/main/java/org/springframework/hateoas/alps/Format.java +++ b/src/main/java/org/springframework/hateoas/alps/Format.java @@ -21,6 +21,7 @@ import java.util.Locale; * Enum for all ALPS doc formats. * * @author Oliver Gierke + * @author Greg Turnquist * @since 0.15 * @see http://alps.io/spec/#prop-format */ diff --git a/src/main/java/org/springframework/hateoas/alps/Type.java b/src/main/java/org/springframework/hateoas/alps/Type.java index cee8c382..88299d64 100644 --- a/src/main/java/org/springframework/hateoas/alps/Type.java +++ b/src/main/java/org/springframework/hateoas/alps/Type.java @@ -21,6 +21,7 @@ import java.util.Locale; * An enum for ALPS descriptor types * * @author Oliver Gierke + * @author Greg Turnquist * @since 0.15 * @see http://alps.io/spec/#prop-type */ diff --git a/src/test/java/org/springframework/hateoas/alps/JacksonSerializationTest.java b/src/test/java/org/springframework/hateoas/alps/JacksonSerializationTest.java index e2cb0a5d..6edc8a44 100755 --- a/src/test/java/org/springframework/hateoas/alps/JacksonSerializationTest.java +++ b/src/test/java/org/springframework/hateoas/alps/JacksonSerializationTest.java @@ -35,6 +35,7 @@ import com.fasterxml.jackson.databind.SerializationFeature; * Unit tests for serialization of ALPS documents. * * @author Oliver Gierke + * @author Greg Turnquist */ public class JacksonSerializationTest { @@ -56,10 +57,10 @@ public class JacksonSerializationTest { Alps alps = alps().// doc(doc().href("http://example.org/samples/full/doc.html").build()). // - descriptors(Arrays.asList(// + descriptor(Arrays.asList(// descriptor().id("search").type(Type.SAFE).// doc(new Doc("A search form with two inputs.", Format.TEXT)).// - descriptors(Arrays.asList( // + descriptor(Arrays.asList( // descriptor().href("#resultType").build(), // descriptor().id("value").name("search").type(Type.SEMANTIC).build())// ).build(), // diff --git a/src/test/resources/org/springframework/hateoas/alps/reference.json b/src/test/resources/org/springframework/hateoas/alps/reference.json index c68937b0..ffbd4dc2 100644 --- a/src/test/resources/org/springframework/hateoas/alps/reference.json +++ b/src/test/resources/org/springframework/hateoas/alps/reference.json @@ -3,14 +3,14 @@ "doc" : { "href" : "http://example.org/samples/full/doc.html" }, - "descriptors" : [ { + "descriptor" : [ { "id" : "search", - "doc" : { - "value" : "A search form with two inputs.", - "format" : "TEXT" - }, "type" : "SAFE", - "descriptors" : [ { + "doc" : { + "format" : "TEXT", + "value" : "A search form with two inputs." + }, + "descriptor" : [ { "href" : "#resultType" }, { "id" : "value", @@ -19,10 +19,10 @@ } ] }, { "id" : "resultType", + "type" : "SEMANTIC", "doc" : { "value" : "results format" }, - "type" : "SEMANTIC", "ext" : { "id" : "#ext-range", "href" : "http://alps.io/ext/range",