spring-cloud/spring-cloud-gateway

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

开放

#3,236 创建于 2024年1月25日

 (6 条评论) (0 个反应) (0 位负责人)Java (3,204 个派生)batch import
bughelp wanted

仓库指标

星标
 (4,284 个星标)
PR 合并指标
 (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"));
    }
}

贡献者指南