Necesito conectarme a la base de datos de forma reactiva usando el reactor de resorte. Aquí está el escenario que me gustaría obtener->

  1. 1.Conéctese a db y obtenga una respuesta

    2. Luego conéctese a db y obtenga response2 mientras proporciona response1.parameter

    1. Únase a esos dos en una sola respuesta y envíelo al usuario como una cadena

Dado que todos los objetos son únicos, planeé usar Mono

Mono<Response1> r1 = qrepo.findByID(id)
Mono<Response2> r2 = qrepo.findByID(r1.getParam())

Mono<String> combined = Mono.when(r1, r2).map(t -> { 
            StringBuffer sb = new StringBuffer();
                sb.append(r1.getProp1());
                sb.append(r2.getProp2());

Pero esto no funciona para mi

0
Mark O 16 oct. 2018 a las 13:48

2 respuestas

La mejor respuesta

Debe obtener response1, luego flatMap su resultado para acceder al parámetro y pasarlo al repositorio y luego asignar el resultado a la cadena

    Mono<String> resultMono = qrepo.findByID(id)
            .flatMap(response1 -> qrepo.findByID(response1.getParam())
                    .map(response2 -> {
                        StringBuilder sb = new StringBuilder();
                        sb.append(response1.getProp1());
                        sb.append(response2.getProp2());
                        return sb.toString();
                    }));
5
Alexander Pankin 16 oct. 2018 a las 11:07

Utilice Mono.zip

Ejemplo:

Mono.zip(Mono.just("hello"), Mono.just("world")).map(tuple2 -> {

      return tuple2.getT1() + tuple2.getT2();
    });

Mono.zip agrega monos dados en un nuevo Mono que se cumplirá cuando todos los Monos dados hayan producido un artículo.

0
Radhakrishnan CH 16 mar. 2020 a las 10:43