diff --git a/src/main/java/org/springframework/hateoas/Link.java b/src/main/java/org/springframework/hateoas/Link.java index dde6fac6..388708b8 100755 --- a/src/main/java/org/springframework/hateoas/Link.java +++ b/src/main/java/org/springframework/hateoas/Link.java @@ -168,6 +168,19 @@ public class Link implements Serializable { return new Link(getUriTemplate().expand(arguments).toString(), getRel()); } + /** + * Returns whether the current {@link Link} has the given link relation. + * + * @param rel must not be {@literal null} or empty. + * @return + */ + public boolean hasRel(String rel) { + + Assert.hasText(rel, "Link relation must not be null or empty!"); + + return this.rel.equals(rel); + } + private UriTemplate getUriTemplate() { if (template == null) { diff --git a/src/main/java/org/springframework/hateoas/ResourceSupport.java b/src/main/java/org/springframework/hateoas/ResourceSupport.java index 22835a70..16c50cdc 100755 --- a/src/main/java/org/springframework/hateoas/ResourceSupport.java +++ b/src/main/java/org/springframework/hateoas/ResourceSupport.java @@ -126,7 +126,7 @@ public class ResourceSupport implements Identifiable { public Optional getLink(String rel) { return links.stream() // - .filter(link -> link.getRel().equals(rel)) // + .filter(link -> link.hasRel(rel)) // .findFirst(); } @@ -151,7 +151,7 @@ public class ResourceSupport implements Identifiable { public List getLinks(String rel) { return links.stream() // - .filter(link -> link.getRel().equals(rel)) // + .filter(link -> link.hasRel(rel)) // .collect(Collectors.toList()); } diff --git a/src/test/java/org/springframework/hateoas/LinkUnitTest.java b/src/test/java/org/springframework/hateoas/LinkUnitTest.java index fdf37869..41df6b07 100755 --- a/src/test/java/org/springframework/hateoas/LinkUnitTest.java +++ b/src/test/java/org/springframework/hateoas/LinkUnitTest.java @@ -223,4 +223,28 @@ public class LinkUnitTest { assertThat(Link.valueOf("; rel=\"http://acme.com/rels/foo-bar\"").getRel()) // .isEqualTo("http://acme.com/rels/foo-bar"); } + + /** + * @see #671 + */ + @Test + public void exposesLinkRelation() { + + Link link = new Link("/", "foo"); + + assertThat(link.hasRel("foo")).isTrue(); + assertThat(link.hasRel("bar")).isFalse(); + } + + /** + * @see #671 + */ + @Test + public void rejectsInvalidRelationsOnHasRel() { + + Link link = new Link("/"); + + assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> link.hasRel(null)); + assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> link.hasRel("")); + } }