From 21719bb0417c9347a12036c0072a73646d396bd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20B=C3=BChler?= Date: Wed, 3 Jan 2018 14:24:49 +0100 Subject: [PATCH] #686 - Support whitespace in Links header (RFC 5988). RFC 5988 (https://tools.ietf.org/html/rfc5988#section-5.5) has clear examples of whitespace in link headers. This commit introduces support (and tests) to support these spec cases. --- .travis.yml | 2 -- pom.xml | 1 + src/main/java/org/springframework/hateoas/Links.java | 2 +- .../java/org/springframework/hateoas/LinksUnitTest.java | 9 +++++++++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0e0047ab..8465b006 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,6 @@ jdk: env: matrix: - PROFILE=non-existant - - PROFILE=spring43-next - - PROFILE=spring5 - PROFILE=spring5-next addons: apt: diff --git a/pom.xml b/pom.xml index 360495f1..3711d60a 100644 --- a/pom.xml +++ b/pom.xml @@ -88,6 +88,7 @@ spring5-next 5.0.2.BUILD-SNAPSHOT + 2.9.2 diff --git a/src/main/java/org/springframework/hateoas/Links.java b/src/main/java/org/springframework/hateoas/Links.java index 8ba46929..a8afb751 100644 --- a/src/main/java/org/springframework/hateoas/Links.java +++ b/src/main/java/org/springframework/hateoas/Links.java @@ -35,7 +35,7 @@ import org.springframework.util.StringUtils; */ public class Links implements Iterable { - private static final Pattern LINK_HEADER_PATTERN = Pattern.compile("(<[^>]*>(;\\w+=\"[^\"]*\")+)"); + private static final Pattern LINK_HEADER_PATTERN = Pattern.compile("(<[^>]*>(;\\s*\\w+=\"[^\"]*\")+)"); static final Links NO_LINKS = new Links(Collections.emptyList()); diff --git a/src/test/java/org/springframework/hateoas/LinksUnitTest.java b/src/test/java/org/springframework/hateoas/LinksUnitTest.java index 813a4965..78c30bc2 100755 --- a/src/test/java/org/springframework/hateoas/LinksUnitTest.java +++ b/src/test/java/org/springframework/hateoas/LinksUnitTest.java @@ -34,6 +34,7 @@ public class LinksUnitTest { static final String FIRST = ";rel=\"foo\""; static final String SECOND = ";rel=\"bar\""; static final String WITH_COMMA = ";rel=\"foo\""; + static final String WITH_WHITESPACE = "; rel=\"foo\"," + SECOND; static final String LINKS = StringUtils.collectionToCommaDelimitedString(Arrays.asList(FIRST, SECOND)); @@ -93,4 +94,12 @@ public class LinksUnitTest { assertThat(twoWithCommaInFirst.getLink("foo")).hasValue(withComma); assertThat(twoWithCommaInFirst.getLink("bar")).hasValue(new Link("/somethingElse", "bar")); } + + /** + * @see https://tools.ietf.org/html/rfc5988#section-5.5 + */ + @Test + public void parsesLinksWithWhitespace() { + assertThat(Links.valueOf(WITH_WHITESPACE)).isEqualTo(reference); + } }