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(""));
+ }
}