spring-cloud/spring-cloud-gateway

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

Open

#3,236 建立於 2024年1月25日

在 GitHub 查看
 (6 留言) (0 反應) (0 負責人)Java (3,204 fork)batch import
bughelp wanted

倉庫指標

Star
 (4,284 star)
PR 合併指標
 (平均合併 1天 21小時) (30 天內合併 18 個 PR)

描述

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

貢獻者指南