diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/hypermedia/HalLinkExtractor.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/hypermedia/HalLinkExtractor.java index c3f28d73..eb55843a 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/hypermedia/HalLinkExtractor.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/hypermedia/HalLinkExtractor.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2015 the original author or authors. + * Copyright 2014-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -54,9 +54,9 @@ class HalLinkExtractor extends AbstractJsonLinkExtractor { List links = new ArrayList<>(); if (object instanceof Collection) { @SuppressWarnings("unchecked") - Collection hrefObjects = (Collection) object; - for (Object hrefObject : hrefObjects) { - maybeAddLink(maybeCreateLink(rel, hrefObject), links); + Collection possibleLinkObjects = (Collection) object; + for (Object possibleLinkObject : possibleLinkObjects) { + maybeAddLink(maybeCreateLink(rel, possibleLinkObject), links); } } else { @@ -65,9 +65,12 @@ class HalLinkExtractor extends AbstractJsonLinkExtractor { return links; } - private static Link maybeCreateLink(String rel, Object possibleHref) { - if (possibleHref instanceof String) { - return new Link(rel, (String) possibleHref); + private static Link maybeCreateLink(String rel, Object possibleLinkObject) { + if (possibleLinkObject instanceof Map) { + Object hrefObject = ((Map) possibleLinkObject).get("href"); + if (hrefObject instanceof String) { + return new Link(rel, (String) hrefObject); + } } return null; } diff --git a/spring-restdocs-core/src/test/java/org/springframework/restdocs/hypermedia/LinkExtractorsPayloadTests.java b/spring-restdocs-core/src/test/java/org/springframework/restdocs/hypermedia/LinkExtractorsPayloadTests.java index 7353bbea..b26374e8 100644 --- a/spring-restdocs-core/src/test/java/org/springframework/restdocs/hypermedia/LinkExtractorsPayloadTests.java +++ b/spring-restdocs-core/src/test/java/org/springframework/restdocs/hypermedia/LinkExtractorsPayloadTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2015 the original author or authors. + * Copyright 2014-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -53,7 +53,7 @@ public class LinkExtractorsPayloadTests { private final String linkType; - @Parameters + @Parameters(name = "{1}") public static Collection data() { return Arrays.asList(new Object[] { new HalLinkExtractor(), "hal" }, new Object[] { new AtomLinkExtractor(), "atom" }); diff --git a/spring-restdocs-core/src/test/resources/link-payloads/atom/wrong-format.json b/spring-restdocs-core/src/test/resources/link-payloads/atom/wrong-format.json index 04a6d84b..a5e2e40f 100644 --- a/spring-restdocs-core/src/test/resources/link-payloads/atom/wrong-format.json +++ b/spring-restdocs-core/src/test/resources/link-payloads/atom/wrong-format.json @@ -1,5 +1,9 @@ { - "_links": { - "alpha": ["http://alpha.example.com/one", "http://alpha.example.com/two"] + "links": { + "alpha": [{ + "href": "http://alpha.example.com/one" + }, { + "href": "http://alpha.example.com/two" + }] } } \ No newline at end of file diff --git a/spring-restdocs-core/src/test/resources/link-payloads/hal/multiple-links-different-rels.json b/spring-restdocs-core/src/test/resources/link-payloads/hal/multiple-links-different-rels.json index 80d36d72..08d0f3ea 100644 --- a/spring-restdocs-core/src/test/resources/link-payloads/hal/multiple-links-different-rels.json +++ b/spring-restdocs-core/src/test/resources/link-payloads/hal/multiple-links-different-rels.json @@ -1,6 +1,10 @@ { "_links": { - "alpha": "http://alpha.example.com", - "bravo": "http://bravo.example.com" + "alpha": { + "href": "http://alpha.example.com" + }, + "bravo": { + "href": "http://bravo.example.com" + } } } \ No newline at end of file diff --git a/spring-restdocs-core/src/test/resources/link-payloads/hal/multiple-links-same-rels.json b/spring-restdocs-core/src/test/resources/link-payloads/hal/multiple-links-same-rels.json index 04a6d84b..45ebca3c 100644 --- a/spring-restdocs-core/src/test/resources/link-payloads/hal/multiple-links-same-rels.json +++ b/spring-restdocs-core/src/test/resources/link-payloads/hal/multiple-links-same-rels.json @@ -1,5 +1,9 @@ { "_links": { - "alpha": ["http://alpha.example.com/one", "http://alpha.example.com/two"] + "alpha": [{ + "href": "http://alpha.example.com/one" + }, { + "href": "http://alpha.example.com/two" + }] } } \ No newline at end of file diff --git a/spring-restdocs-core/src/test/resources/link-payloads/hal/single-link.json b/spring-restdocs-core/src/test/resources/link-payloads/hal/single-link.json index be90b377..d19ca125 100644 --- a/spring-restdocs-core/src/test/resources/link-payloads/hal/single-link.json +++ b/spring-restdocs-core/src/test/resources/link-payloads/hal/single-link.json @@ -1,5 +1,7 @@ { "_links": { - "alpha": "http://alpha.example.com" + "alpha": { + "href": "http://alpha.example.com" + } } } \ No newline at end of file