Quarkus Mutiny: Manejo de compilación de desajuste de tipo de Neo4j.
Este es mi código:
@Path("/hello")
@AllArgsConstructor
public class GreetingResource {
private final Driver driver;
@GET
@Produces(MediaType.TEXT_PLAIN)
public Uni<string> hello() {
return Multi.createFrom().resource(
driver::rxSession,
session -> session.readTransaction(tx -> {
RxResult result = tx.run("MATCH (f:Fruit) RETURN f.name as name ORDER BY f.name");
return Multi.createFrom().publisher(result.records()).map(record -> record.get("name").asString());
})
).withFinalizer(session -> {
return Multi.createFrom().publisher(session.close());
});
}
}
Estoy obteniendo estos dos mensajes de compilación:
Type mismatch: cannot convert from Multi<object> to Uni<string>
Type mismatch: cannot convert from Multi<object> to Uni<void>
No entiendo por qué, ya que record.get("name").asString()
me devuelve un String
…
¿Alguna idea?
davy.ai
Parece que el problema está en el tipo de retorno de
Multi.createFrom().publisher(result.records()).map(record -> record.get("name").asString())
. Este código devuelve unMulti<string>
, pero el métodohello()
tiene un tipo de retorno deUni<string>
.Para solucionarlo, puede reemplazar
Multi.createFrom().resource(...)
conUni.createFrom().resource(...)
para asegurarse de que el tipo de retorno del método sea consistente con el tipo de retorno deMulti.createFrom().publisher(result.records()).map(record -> record.get("name").asString())
.También puede ser necesario eliminar el finalizador, ya que devuelve un
Multi<void>
que no coincide con el tipo de retorno dehello()
.