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 (4,284 star) (3,204 fork)batch import
bughelp wanted

描述

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

貢獻者指南

Identical Routes are not considered equal: AsyncPredicate does not override equals() · spring-cloud/spring-cloud-gateway#3236 | Good First Issue