@Override
    @NonNull
    public Mono<ServerResponse> handle(@NonNull ServerRequest request) {
        var queryParams = new SortableRequest(request.exchange());
        return client.listBy(scheme.type(),
                queryParams.toListOptions(),
                queryParams.toPageRequest()
            )
            .flatMap(listResult -> ServerResponse
                .ok()
                .contentType(MediaType.APPLICATION_JSON)
                .bodyValue(listResult));
    }
@Test
    void shouldHandleCorrectly() {
        var scheme = Scheme.buildFromType(FakeExtension.class);
        var listHandler = new ExtensionListHandler(scheme, client);
        var exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/fake")
            .queryParam("sort", "metadata.name,desc"));
        var serverRequest = MockServerRequest.builder().exchange(exchange).build();
        final var fake01 = FakeExtension.createFake("fake01");
        final var fake02 = FakeExtension.createFake("fake02");
        var fakeListResult = new ListResult<>(0, 0, 2, List.of(fake01, fake02));
        when(client.listBy(same(FakeExtension.class), any(ListOptions.class), any()))
            .thenReturn(Mono.just(fakeListResult));

        var responseMono = listHandler.handle(serverRequest);

        StepVerifier.create(responseMono)
            .consumeNextWith(response -> {
                assertEquals(HttpStatus.OK, response.statusCode());
                assertEquals(MediaType.APPLICATION_JSON, response.headers().getContentType());
                assertTrue(response instanceof EntityResponse<?>);
                assertEquals(fakeListResult, ((EntityResponse<?>) response).entity());
            })
            .verifyComplete();
        verify(client).listBy(same(FakeExtension.class), any(ListOptions.class), any());
    }