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

贡献者指南