2

RxJava 2 と Reactor には、switchIfEmpty現在のフローに要素がない場合に新しいフローに切り替える like メソッドがあります。

しかし、Minutyを使い始めたとき、Quarkus サンプルを変換して Reactive 機能を使用するときに、代替手段が見つかりません。

現在、私の解決策は次のとおりです。私のPostRepositoryでは、例外を使用して、投稿が見つからないことを示します。

 public Uni<Post> findById(UUID id) {
        return this.client
                .preparedQuery("SELECT * FROM posts WHERE id=$1", Tuple.of(id))
                .map(RowSet::iterator)
                .flatMap(it -> it.hasNext() ? Uni.createFrom().item(rowToPost(it.next())) : Uni.createFrom().failure(()-> new PostNotFoundException()));
    }

そして、それをキャッチしPostResourceます。

@Path("{id}")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Uni<Response> getPostById(@PathParam("id") final String id) {
        return this.posts.findById(UUID.fromString(id))
                .map(data -> ok(data).build())
                .onFailure(PostNotFoundException.class).recoverWithItem(status(Status.NOT_FOUND).build());
    }

Uniで手段 0 または 1 要素を返す方法、およびlike メソッドPostRepositoryを使用してフローの代替パスを構築する方法は?switchIfEmptyPostResource

4

1 に答える 1

1

Uni常にアイテムを含むという意味でにすることはできません(潜在的にnull)。

したがって、同等のものswitchIfEmptyuni.onItem().ifNull().switchTo(() -> ...)

于 2020-04-23T13:29:19.727 に答える