Vert.x RESTful Verticle

user3159152

数日新しいように、私はVert.xに非常に慣れていません。私はJAX-RS、RESTeasyの世界から来ました。私は非常に間違っているかもしれません、私を訂正してください。

そこで、vertx-webとSpringを使用してRESTAPIを作成したいと思います。VerticlesはRESTリソースと見なしています。vertx-webブログspring-exampleを調べましたが、例は非常に単純で、ほとんどが1つのリソースとバーティクルのみで構成されています。

私の質問は、Verticleに独自のRESTインターフェース(サブルーター)を公開させる方法と、そのサブルーターをアプリケーションのメインルーターに登録する方法です。

私は次のようなことを試しましたが、/ products / allをリクエストすると404が返されます:(

public class ProductsVerticle extends AbstractVerticle {

@Override
public void start(Future<Void> startFuture) throws Exception {
    super.start(startFuture);
}

public static Router getRouter() {
    Router router = Router.router(Vertx.vertx());

    router.get("/all").consumes("application/json").produces("application/json")
            .handler(routingContext -> {
                routingContext.response()
                        .putHeader("content-type", "text/html")
                        .end("<h1>Products</h1>");
            });

    return router;
}

}

public class ServerVerticle extends AbstractVerticle {

@Override
public void start() throws Exception {
    super.start();

    Router mainRouter = Router.router(vertx);
    ProductsVerticle productsVerticle = new ProductsVerticle();

    vertx.deployVerticle(productsVerticle, handler -> {
        if (handler.succeeded()) {
            LOG.info("Products Verticle deployed successfully");
            mainRouter.mountSubRouter("/products", productsVerticle.getRouter());
        }
    });

    mainRouter.get("/static").handler(routingContext -> {
        routingContext.response()
                .putHeader("content-type", "text/html")
                .end("<h1>Hello from my first Vert.x 3 application</h1>");
    });

    HttpServer server = vertx.createHttpServer();
    server.requestHandler(mainRouter::accept);
    server.listen(8090);
}

}

シミ

あなたの必要性は絶対に理解できます。しかし、Springが何をするのかをすぐに考える必要があります。--アプリケーションサーバーが起動すると、startuphookが実行され、Jax-rs Annotationsで注釈が付けられたすべてのクラスのクラスパス全体が検索され、初期化されるか、単に「ルーター」に登録されます。

だからあなたがそれを望むなら、あなたはそれを持つことができますが、あなたは自分でそれをしなければなりません。すみません:D。

例えば:

class Server extends AbstractVerticle {

    @Override
    public void start() throws Exception {
        List<AbstractVerticle> verticles = searchForVerticlesWithMyAnnotation();
        verticles.forEach((V) = > router.add(V));
    }

}

@MyOwnJax(path = "/blaa")
public class TestService {
}

@interface MyOwnJax {
    String path();
}

ここでは、メソッド「searchForVerticlesWIthMyAnnotation」が注意が必要です。遅くするべきではありません。ただし、とにかくSpringを使用する場合は、org.springframework.context.annotation.ClassPathScanningCandidateComponentProviderのようなものを使用できます。

またはここを参照してください:Stackoverflow:アノテーションを検索@runtime

しかし、これは、ここでは大きなしかしです。;)おそらく、REST APIを作成するためにSpringよりも良いアイデアがありますか?私の意見では、春は本当に「ずんぐり」ですが、Vertx.xは本当にスムーズです。(私の実際的ではない意見をお詫びします。)

私は自分のアプリケーションでDIを使用したアプローチを使用しています。つまり:

router.route(HttpMethod.GET,
 "/user/login").handler(injector.getInstance(ILoginUser.class));

インジェクターとして通常のguiceフレームワークを使用。これは単なるインターフェースですが、サーバーを起動するバーティクルで何かを変更する前に、非常に大きな変更を加えることができます。(実際には、ほとんどの場合、パスを追加または削除する必要がある場合に限ります)

概要:

  • Springアプローチが必要な場合は、リフレクションまたはリフレクションを使用するライブラリを使用する必要があります。欠点:起動時のパフォーマンス、時には少し魔法がかかり、エラー/デバッグを見つけるのが非常に難しい場合があります。利点:テストがとても簡単で、機能を拡張するのが本当に簡単です

  • パス自体に頂点を登録します。欠点:「サーバー」バーティクルでパスを追加/削除する必要があります。利点:スタートアップパフォーマンス、魔法なし、何がいつ起こるかについての完全な制御。

それはほんの短い要約であり、多くのポイントは言及されていません。しかし、これがあなたの質問に答えることを願っています。いくつかのフォローアップの質問がある場合は、書いてください!

Jeerze、

シミ

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Vert.x undeploy verticle が IllegalStateException Unknown deployment をスローする

分類Dev

Vert.xのVerticle(s)JSON / YAML構成(環境ごとに推奨)

分類Dev

Vert.x:VerticleカスタムstartFutureハンドラーは常に書き直されます

分類Dev

Vert.x Verticleの展開が完了するまでテストを待機させるにはどうすればよいですか

分類Dev

Tomcat vs Vert.x

分類Dev

Module in Vert.X 3

分類Dev

vert.xでコンシューマーVerticleのstartメソッドのJUnitテストケースを作成するにはどうすればよいですか?

分類Dev

Spring Webflux vs Vert.x

分類Dev

Spring Webflux vs Vert.x

分類Dev

Spring Webflux vs Vert.x

分類Dev

Vert.x 3.9でのThymeleaf TemplateEngineの使用

分類Dev

Vert.x RabbitMQエンコードNullPointerException

分類Dev

Vert.x Http Request not assigning parameters as configurations

分類Dev

Vert.Xセキュリティ

分類Dev

Vert.x + Hazelcast cluster on docker container with bridged network

分類Dev

Vert.X3のモジュール

分類Dev

What does it mean that Vert.x is "based on callbacks" (instead of futures)?

分類Dev

Vert.X 4 WebOpenAPIルーターblockingHandler

分類Dev

Vert.x 非同期テスト

分類Dev

Vert.x 2-> EventBusを介したVert.x3通信

分類Dev

Vert.x HTTPリダイレクトHTTPSへ

分類Dev

Vert.x:1000 rpsの最も単純なサーバー

分類Dev

Vert.x java List <Futures>パラメータ化

分類Dev

Vert.X SLF4Jロギング

分類Dev

Vert.x-Verticlesとサービスの違い

分類Dev

重大:JavaFX + Vert.x + RESTでの未処理の例外

分類Dev

How can I estabilish the connection to Java websocket server(using vert.x 3.2.1)?

分類Dev

How can I estabilish the connection to Java websocket server(using vert.x 3.2.1)?

分類Dev

Vert.xのBlockedThreadCheckerを無効にする方法は?

Related 関連記事

  1. 1

    Vert.x undeploy verticle が IllegalStateException Unknown deployment をスローする

  2. 2

    Vert.xのVerticle(s)JSON / YAML構成(環境ごとに推奨)

  3. 3

    Vert.x:VerticleカスタムstartFutureハンドラーは常に書き直されます

  4. 4

    Vert.x Verticleの展開が完了するまでテストを待機させるにはどうすればよいですか

  5. 5

    Tomcat vs Vert.x

  6. 6

    Module in Vert.X 3

  7. 7

    vert.xでコンシューマーVerticleのstartメソッドのJUnitテストケースを作成するにはどうすればよいですか?

  8. 8

    Spring Webflux vs Vert.x

  9. 9

    Spring Webflux vs Vert.x

  10. 10

    Spring Webflux vs Vert.x

  11. 11

    Vert.x 3.9でのThymeleaf TemplateEngineの使用

  12. 12

    Vert.x RabbitMQエンコードNullPointerException

  13. 13

    Vert.x Http Request not assigning parameters as configurations

  14. 14

    Vert.Xセキュリティ

  15. 15

    Vert.x + Hazelcast cluster on docker container with bridged network

  16. 16

    Vert.X3のモジュール

  17. 17

    What does it mean that Vert.x is "based on callbacks" (instead of futures)?

  18. 18

    Vert.X 4 WebOpenAPIルーターblockingHandler

  19. 19

    Vert.x 非同期テスト

  20. 20

    Vert.x 2-> EventBusを介したVert.x3通信

  21. 21

    Vert.x HTTPリダイレクトHTTPSへ

  22. 22

    Vert.x:1000 rpsの最も単純なサーバー

  23. 23

    Vert.x java List <Futures>パラメータ化

  24. 24

    Vert.X SLF4Jロギング

  25. 25

    Vert.x-Verticlesとサービスの違い

  26. 26

    重大:JavaFX + Vert.x + RESTでの未処理の例外

  27. 27

    How can I estabilish the connection to Java websocket server(using vert.x 3.2.1)?

  28. 28

    How can I estabilish the connection to Java websocket server(using vert.x 3.2.1)?

  29. 29

    Vert.xのBlockedThreadCheckerを無効にする方法は?

ホットタグ

アーカイブ