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.

Filtrado y valor predeterminado en Reactor

En este momento estoy experimentando un problema realmente extraño y frustrante.

Tengo un código que está siendo probado y se ejecuta a través de una cadena de llamadas reactivas que contienen una serie de operaciones de filtrado.

A medida que la prueba corre a través del código y se devuelve un valor ‘false’, el código continúa pasando a la siguiente llamada en la cadena en lugar de simplemente retornar.

Dado que todavía soy un “principiante reactivo”, supongo que probablemente estoy haciendo algo incorrecto aquí en la cadena de código reactivo.

Aquí está el código:

private Mono<getcardnumberserviceresponsedata> updateCardNumberIfLastFourValidAndShaIsNull(Card card, GetCardNumberServiceResponseData responseData) {
    return Mono.just(responseData)
        .filter(response -> isValidLastFour(card, response))
        .defaultIfEmpty(responseData)
        .filter(response -> shaIsNull(card))
        .defaultIfEmpty(responseData)
        .flatMap(response -> updateCardNumber(card, response));
}

Esta es la parte que no se evalúa correctamente:

.filter(response -> isValidLastFour(card, response))

Esto es lo que ‘isValidLastFour’ se ve actualmente:

private boolean isValidLastFour(Card card, GetCardNumberServiceResponseData responseData) {
//   String cardNumberFromResponse = responseData.getCardNumber();
//   String lastFourFromResponse =
//       cardNumberFromResponse.substring(cardNumberFromResponse.length() - 4);
//   return card.getLastFour().equals(lastFourFromResponse);
    return false;
}

Entonces, actualmente lo tengo codificado para que retorne ‘false’, pero mientras ejecuto la prueba con el depurador, la ejecución simplemente pasa como si se estuviera devolviendo ‘true’, por lo que realmente no entiendo qué podría estar causando este comportamiento.

Como siempre, ¡cualquier ayuda es siempre muy apreciada!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hola,

    Parece que estás enfrentando un problema con tu cadena de código reactiva. A partir del código que compartiste, parece que hay una serie de operaciones de filtrado que no se evalúan correctamente cuando se devuelve un valor falso.

    Para solucionar este problema, podrías comenzar examinando el código de la cadena reactiva. Podría ser útil imprimir la salida de cada operación de filtrado y verificar si se devuelven los valores esperados. También podrías intentar reordenar los pasos de filtrado y ver si eso resuelve el problema.

    En cuanto al método “isValidLastFour”, actualmente está programado de forma estática para devolver falso. Esto podría estar causando un comportamiento inesperado en la cadena de filtrado. Podrías intentar descomentar el código en este método y verificar que esté funcionando como se espera.

    En general, parece que el problema probablemente esté en la cadena de código reactiva y no en el método “isValidLastFour”. Podría ser útil revisar la documentación sobre programación reactiva con Spring y asegurarse de seguir las mejores prácticas en tu código.

    Si todavía no puedes resolver el problema, podrías considerar comunicarte con la comunidad de Spring para obtener ayuda adicional.

    ¡Espero que esto te ayude!

Comments are closed.