Skip to content

Commit

Permalink
Improve ProblemDetail equals and hashCode
Browse files Browse the repository at this point in the history
Lazy computed title property should be taken into account

See gh-30294
  • Loading branch information
quaff authored and rstoyanchev committed Apr 12, 2023
1 parent 90627b4 commit a8f31f5
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
*
* @author Rossen Stoyanchev
* @author Juergen Hoeller
* @author Yanming Zhou
* @since 6.0
* @see <a href="https://datatracker.ietf.org/doc/html/rfc7807">RFC 7807</a>
* @see org.springframework.web.ErrorResponse
Expand Down Expand Up @@ -239,7 +240,7 @@ public boolean equals(@Nullable Object other) {
return false;
}
return (this.type.equals(otherDetail.type) &&
ObjectUtils.nullSafeEquals(this.title, otherDetail.title) &&
ObjectUtils.nullSafeEquals(this.getTitle(), otherDetail.getTitle()) &&
this.status == otherDetail.status &&
ObjectUtils.nullSafeEquals(this.detail, otherDetail.detail) &&
ObjectUtils.nullSafeEquals(this.instance, otherDetail.instance) &&
Expand All @@ -249,7 +250,7 @@ public boolean equals(@Nullable Object other) {
@Override
public int hashCode() {
int result = this.type.hashCode();
result = 31 * result + ObjectUtils.nullSafeHashCode(this.title);
result = 31 * result + ObjectUtils.nullSafeHashCode(this.getTitle());
result = 31 * result + this.status;
result = 31 * result + ObjectUtils.nullSafeHashCode(this.detail);
result = 31 * result + ObjectUtils.nullSafeHashCode(this.instance);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.springframework.http;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.assertThat;
Expand All @@ -24,11 +25,12 @@
* Unit tests for {@link ProblemDetail}.
*
* @author Juergen Hoeller
* @author Yanming Zhou
*/
class ProblemDetailTests {

@Test
void equalsAndHashCode() {
void equalsAndHashCode() throws Exception {
ProblemDetail pd1 = ProblemDetail.forStatus(500);
ProblemDetail pd2 = ProblemDetail.forStatus(HttpStatus.INTERNAL_SERVER_ERROR);
ProblemDetail pd3 = ProblemDetail.forStatus(HttpStatus.NOT_FOUND);
Expand All @@ -48,6 +50,12 @@ void equalsAndHashCode() {
assertThat(pd2).isNotEqualTo(pd4);
assertThat(pd1.hashCode()).isNotEqualTo(pd3.hashCode());
assertThat(pd1.hashCode()).isNotEqualTo(pd4.hashCode());

ObjectMapper om = new ObjectMapper();
ProblemDetail pd5 = om.readValue(om.writeValueAsBytes(pd1), ProblemDetail.class);
assertThat(pd1).isEqualTo(pd5);
assertThat(pd5).isEqualTo(pd1);
assertThat(pd1.hashCode()).isEqualTo(pd5.hashCode());
}

}

0 comments on commit a8f31f5

Please sign in to comment.