es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Devolver un error cambia la firma del método.

Tuve la sensación a partir de los tutoriales de que devolver algo throwable no debería cambiar el tipo de retorno del método.

Aquí están mis intentos:

  1. Cuando uso handle, todo está bien hasta que agrego .timeout(), entonces el tipo de retorno de la función cambia a Flux<object>.
private Flux<string> exampleHandle()
{
    MutableHttpRequest<string> req = HttpRequest.GET("http://localhost:8080");

    return httpClient.exchange(req, TokenResponse.class)
        .handle((response, sink) -> {
            Optional<tokenresponse> optionalBody = response.getBody();
            if (optionalBody.isEmpty()) {
                sink.error(new InitializationException("Fallo al obtener el token de autenticación. El cuerpo es nulo."));
            } else {
                TokenResponse tokenResponse = optionalBody.get();
                String accessToken = tokenResponse.getAccessToken();
                if (accessToken != null) {
                    sink.next(accessToken);
                } else {
                    sink.error(new InitializationException("Fallo al obtener el token de autenticación. El token de autenticación es nulo."));
                }
            }
        });
   // .timeout(Duration.ofSeconds(10)); // El timeout cambia el tipo de retorno a Flux<object>
}
  1. Cuando uso map y Flux.error (también intenté con Mono.error), el tipo de retorno de la función cambia a Flux<object> cuando introduzco Flux.error en map.
private Flux<string> exampleMap()
{
    MutableHttpRequest<string> req = HttpRequest.GET("http://localhost:8080");

    return httpClient.exchange(req, TokenResponse.class)
        .map(response -> {
            Optional<tokenresponse> optionalBody = response.getBody();
            if (optionalBody.isEmpty()) {
                return Flux.error(new InitializationException("Fallo al obtener el token de autenticación. El cuerpo es nulo."));
            } else {
                TokenResponse tokenResponse = optionalBody.get();
                String accessToken = tokenResponse.getAccessToken();
                if (accessToken != null) {
                    return accessToken;
                } else {
                    return Flux.error(new InitializationException("Fallo al obtener el token de autenticación. El token de autenticación es nulo."));
                }
            }
        });
}

¿Alguien con más conocimientos puede explicarme qué estoy haciendo mal? ¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Devolver un Throwable no debería cambiar el tipo de retorno del método. Sin embargo, en los ejemplos dados, el tipo de retorno de la función sí cambia al introducir ciertas operaciones.

    En el primer ejemplo, al agregar .timeout() a la función handle, el tipo de retorno cambia a Flux<object>. Esto se debe a que .timeout() devuelve un Mono en lugar de un Flux, y cuando se combina con handle, crea un Flux<object> como resultado.

    En el segundo ejemplo, al usar Flux.error dentro de la función map, el tipo de retorno cambia a Flux<object>. Esto se debe a que la función map espera devolver un único valor para cada entrada, pero al usar Flux.error dentro de map, se crea una señal de error para cada entrada, lo que resulta en un Flux<><object>>. Para evitar esto, podrías usar flatMap en lugar de map, lo que te permitiría devolver un Mono o Flux para cada entrada y luego aplanar los resultados en un único Flux.

    En resumen, es importante tener en cuenta los tipos de las funciones que se utilizan y cómo afectan el tipo de retorno de la función.

Comments are closed.