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:
- Cuando uso
handle
, todo está bien hasta que agrego.timeout()
, entonces el tipo de retorno de la función cambia aFlux<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>
}
- Cuando uso
map
yFlux.error
(también intenté conMono.error
), el tipo de retorno de la función cambia aFlux<object>
cuando introduzcoFlux.error
enmap
.
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!
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ónhandle
, el tipo de retorno cambia aFlux<object>
. Esto se debe a que.timeout()
devuelve unMono
en lugar de unFlux
, y cuando se combina conhandle
, crea unFlux<object>
como resultado.En el segundo ejemplo, al usar
Flux.error
dentro de la funciónmap
, el tipo de retorno cambia aFlux<object>
. Esto se debe a que la funciónmap
espera devolver un único valor para cada entrada, pero al usarFlux.error
dentro demap
, se crea una señal de error para cada entrada, lo que resulta en unFlux<><object>>
. Para evitar esto, podrías usarflatMap
en lugar demap
, lo que te permitiría devolver unMono
oFlux
para cada entrada y luego aplanar los resultados en un únicoFlux
.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.