Проблема с обработчиком сбоев при использовании веб-маршрутов Vertx и Minity в приложении Quarkus

Я пробовал использовать Munity API и Vertx Route вместе. Полные коды здесь.

Я определил такое правило маршрутизатора.

 router.put("/posts/:id").consumes("application/json").handler(BodyHandler.create()).handler(handlers::update);

И реализация обработчика такая.

    LOGGER.log(Level.INFO, "\npath param id: {0}\nrequest body: {1}", new Object[]{id, body});
        var form = fromJson(body, PostForm.class);
        this.posts.findById(UUID.fromString(id))
                .onFailure(PostNotFoundException.class).invoke(ex -> rc.response().setStatusCode(404).end())
                .map(
                        post -> {
                            post.setTitle(form.getTitle());
                            post.setContent(form.getContent());

                            return this.posts.update(UUID.fromString(id), post);
                        }
                )
                .subscribe()
                .with(data -> rc.response().setStatusCode(204).end());

в findById метод, он бросает PostNotFoundException.

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

При запуске приложения и обновления (через метод HTTP PUT) на /posts/postidбез существующего идентификатора сообщения он будет печатать статус ошибки 404, как и ожидалось, но в периоде есть время паузы.

В другом методе обработчика он вызывает findById нравится следующее, и он хорошо работает и быстро реагирует, когда его не обнаруживают.

        this.posts.findById(UUID.fromString(id))
                .subscribe()
                .with(
                        post -> rc.response().end(toJson(post)),
                        throwable -> rc.fail(404, throwable)
                );

0 ответов

Другие вопросы по тегам