diff --git a/src/main/java/org/springframework/hateoas/Links.java b/src/main/java/org/springframework/hateoas/Links.java index a8afb751..ec957f43 100644 --- a/src/main/java/org/springframework/hateoas/Links.java +++ b/src/main/java/org/springframework/hateoas/Links.java @@ -71,6 +71,19 @@ public class Links implements Iterable { .filter(link -> link.getRel().equals(rel)).findFirst(); } + /** + * Returns the {@link Link} with the given relation. + * + * @param rel the relation type to lookup a link for. + * @return + * @throws IllegalArgumentException if no link with the given relation was present. + * @since 1.0 + */ + public Link getRequiredLink(String rel) { + + return getLink(rel) // + .orElseThrow(() -> new IllegalArgumentException(String.format("Couldn't find link with rel '%s'!", rel))); + } /** * Returns all {@link Links} with the given relation type. * diff --git a/src/test/java/org/springframework/hateoas/LinksUnitTest.java b/src/test/java/org/springframework/hateoas/LinksUnitTest.java index 78c30bc2..66a8bb0e 100755 --- a/src/test/java/org/springframework/hateoas/LinksUnitTest.java +++ b/src/test/java/org/springframework/hateoas/LinksUnitTest.java @@ -102,4 +102,23 @@ public class LinksUnitTest { public void parsesLinksWithWhitespace() { assertThat(Links.valueOf(WITH_WHITESPACE)).isEqualTo(reference); } + + @Test // #805 + public void returnsRequiredLink() { + + Link reference = new Link("http://localhost", "someRel"); + Links links = new Links(reference); + + assertThat(links.getRequiredLink("someRel")).isEqualTo(reference); + } + + @Test // #805 + public void rejectsMissingLinkWithIllegalArgumentException() { + + Links links = new Links(); + + assertThatExceptionOfType(IllegalArgumentException.class) // + .isThrownBy(() -> links.getRequiredLink("self")) // + .withMessageContaining("self"); + } }