Reactive Spring - redirect

0

Mój kod:

   @Bean
    public RouterFunction<ServerResponse> indexRouter() {
        return route(GET("/my/url"), request -> {
            Optional<String> stringOptional = request.queryParam("activationKey");
            String activationKey = stringOptional.get();

            registrationService
                .findCoderByActivationKey(activationKey)
                .doOnNext(v -> v.setActivated(true))
                .flatMap(registrationService::saveUser)
                .subscribe(v -> {
                    logger.info("Confirmation request by: " + v.getEmail());
                });

            return ServerResponse.temporaryRedirect(URI.create("http://moj-url")).build();
        });
    }

Co on robi: jak wbiję pod my/url to wykonuje się to Mono, a następnie zostaje wykonane przekierowanie pod inny adres, w tym wypadku: http://moj-url. I teraz moje pytanie brzmi czy da się to jakoś ładniej i poprawniej zapisać (na przykład bez użycia subscribe). Czy @jarekr000000 pomoże jak zawsze ?

2

O tak:

    @Bean
    public RouterFunction<ServerResponse> indexRouter() {
        return route(GET("/my/url"), request -> 
            request.queryParam("activationKey")
            .map( activationKey ->
                    registrationService
                            .findCoderByActivationKey(activationKey)
                            .doOnNext(v -> v.setActivated(true))
                            .flatMap(registrationService::saveUser)
                            .flatMap(v -> {
                                logger.info("Confirmation request by: " + v.getEmail());
                                return ServerResponse.temporaryRedirect(URI.create("http://moj-url")).build();
                            })
            ).orElseGet(()->ServerResponse.notFound().build())
        );
    }

czy jeszcze lepiej (ale nie najlepiej)

   @Bean
    public RouterFunction<ServerResponse> indexRouter() {
        return route(GET("/my/url"), request -> 
            request.queryParam("activationKey")
            .map(this::activateUser)
                    .orElseGet(()->ServerResponse.notFound().build())
        );
    }

    private Mono<ServerResponse> activateUser(String activationKey) {
        return registrationService
                .findCoderByActivationKey(activationKey)
                .doOnNext(v -> v.setActivated(true))
                .flatMap(registrationService::saveUser)
                .flatMap(v -> {
                    logger.info("Confirmation request by: " + v.getEmail());
                    return ServerResponse.temporaryRedirect(URI.create("http://moj-url")).build();
                });
    }
0

Oba sposoby działają, dziękuję. Sam kombinowałem nad tym ponad godzinę :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1