spring-cloud/spring-cloud-gateway

Identical Routes are not considered equal: AsyncPredicate does not override equals()

Open

#3,236 opened on 2024年1月25日

GitHub で見る
 (6 comments) (0 reactions) (0 assignees)Java (3,204 forks)batch import
bughelp wanted

Repository metrics

Stars
 (4,284 stars)
PR merge metrics
 (平均マージ 1d 21h) (30d で 18 merged PRs)

説明

Two logically equal Routes are not programmatically equal since Route's equals() compares predicates, and the AsyncPredicate class does not override equals() (hence you get a simple reference comparison). Here's a test that reproduces the issue:

class RouteEqualityTest {

    @Test
    void testTwoIdenticalRouteAreEqual() {
        assertThat(getRouteBuilderStub().build()).isEqualTo(getRouteBuilderStub().build());
    }

    private Route.AsyncBuilder getRouteBuilderStub() {
        return Route.async()
                .id("123")
                .uri("https://example.com")
                .predicate(exchange -> exchange.getRequest()
                        .getPath()
                        .value()
                        .equals("/test-path"));
    }
}

コントリビューターガイド