diff --git a/src/main/java/org/springframework/hateoas/LinkRelation.java b/src/main/java/org/springframework/hateoas/LinkRelation.java index d2d0df49..78a1b421 100644 --- a/src/main/java/org/springframework/hateoas/LinkRelation.java +++ b/src/main/java/org/springframework/hateoas/LinkRelation.java @@ -73,6 +73,6 @@ public interface LinkRelation { Assert.notNull(relation, "LinkRelation must not be null!"); - return this.value().equals(relation.value()); + return this.value().equalsIgnoreCase(relation.value()); } } diff --git a/src/main/java/org/springframework/hateoas/StringLinkRelation.java b/src/main/java/org/springframework/hateoas/StringLinkRelation.java index 34c16f4f..a5b01e56 100644 --- a/src/main/java/org/springframework/hateoas/StringLinkRelation.java +++ b/src/main/java/org/springframework/hateoas/StringLinkRelation.java @@ -54,7 +54,7 @@ class StringLinkRelation implements LinkRelation, Serializable { Assert.hasText(relation, "Relation must not be null or empty!"); - return CACHE.computeIfAbsent(relation, it -> new StringLinkRelation(it)); + return CACHE.computeIfAbsent(relation, StringLinkRelation::new); } /* @@ -75,4 +75,19 @@ class StringLinkRelation implements LinkRelation, Serializable { public String toString() { return value(); } + + @Override + public boolean equals(Object o) { + + if (this == o) { + return true; + } + + if (o == null || getClass() != o.getClass()) { + return false; + } + + StringLinkRelation that = (StringLinkRelation) o; + return this.relation.equalsIgnoreCase(that.relation); + } } diff --git a/src/test/java/org/springframework/hateoas/LinkRelationUnitTest.java b/src/test/java/org/springframework/hateoas/LinkRelationUnitTest.java index 13b9b65a..f38ec9f0 100644 --- a/src/test/java/org/springframework/hateoas/LinkRelationUnitTest.java +++ b/src/test/java/org/springframework/hateoas/LinkRelationUnitTest.java @@ -49,6 +49,15 @@ public class LinkRelationUnitTest { assertThat(myOwnLinkRelations).containsExactlyInAnyOrder(MyOwnLinkRelation.FOO, MyOwnLinkRelation.BAR); } + @Test // #825 + public void verifyRFC8288CaseInsensitiveMatching() { + + assertThat(LinkRelation.of("self")).isEqualTo(LinkRelation.of("SELF")); + assertThat(LinkRelation.of("SeLf")).isEqualTo(IanaLinkRelations.SELF); + assertThat(LinkRelation.of("self").isSameAs(LinkRelation.of("SELF"))).isTrue(); + assertThat(IanaLinkRelations.SELF.isSameAs(LinkRelation.of("seLF"))).isTrue(); + } + /** * Custom implementation of the {@link LinkRelation} interface. */