允许在vert.x中创建JAX-RS Jersey资源。
将vertx-jersey依赖项添加到您的项目中
<dependency> <groupId>com.englishtown.vertx</groupId> <artifactId>vertx-jersey</artifactId> <version>4.7.0</version> </dependency>
有关入门,请参见maven-simplest。还有其他示例模块,涵盖:注入,过滤器,序列化,摇动等。
有多种方法启动Jersey服务器:
作为服务运行可能是最简单的入门方法。
在命令行中:
vertx run service:com.englishtown.vertx:vertx-jersey:4.7.0 -conf config.json
以编程方式:
vertx.deployVerticle("service:com.englishtown.vertx:vertx-jersey:4.7.0", config);
请参阅maven-service示例。
注意:作为服务运行时,vertx-hk2 必须位于类路径上。
您可以从命令行运行JerseyVerticle,而不是作为服务运行:
vertx run java-hk2:com.englishtown.vertx.jersey.JerseyVerticle -conf config.json
vertx run java-guice:com.englishtown.vertx.jersey.JerseyVerticle -conf config.json
或以编程方式
vertx run java-hk2:com.englishtown.vertx.jersey.JerseyVerticle -conf config.json
vertx run java-guice:com.englishtown.vertx.jersey.JerseyVerticle -conf config.json
假设您在类路径上有vertx-hk2或vertx-guice以及vertx-jersey及其所有依赖项。
您也可以跳过JerseyVerticle
和实例化您JerseyServer
自己。为此,最容易使用DI,但是也可以手动完成。
vertx-jersey配置如下:
{ "host": "<host>", "port": <port>, "ssl": <ssl>, "base_path": "<base_path>", "packages": ["<packages>"], "components": ["<components>"], "instances": ["<instances>"], "properties": {"<properties>"}, "compression_supported": <compression_supported>, "jks_options": <jks_options>, "receive_buffer_size": <receive_buffer_size>, "max_body_size": <max_body_size>, "backlog_size": <backlog_sze> }
host
-侦听连接的主机或IP地址。0.0.0.0
表示监听所有可用地址。默认是0.0.0.0
port
-用于侦听连接的端口。默认值为80
。ssl
-服务器应该https
用作协议吗?默认值为false
。base_path
-基本路径球衣响应。默认值为/
。packages
-检查资源的一组软件包名称。也可以使用json字段resources
。components
-要注入的组件类名称的数组(功能等)。例如:"org.glassfish.jersey.jackson.JacksonFeature"
。也可以使用json字段features
。instances
-一组要创建和注册的单例实例(HK2活页夹等)。也可以使用json字段binders
。properties
-在ResourceConfig上设置具有附加属性的对象。也可以使用json字段resource_config
。compression_supported
-布尔值,表示服务器是否支持压缩。默认值为false
。jks_options
-创建io.vertx.core.net.JksOptions的JSON对象。只有使用,如果ssl
是true
。receive_buffer_size
-int接收缓冲区的大小。该值是可选的。max_body_size
-允许的最大int主体大小。默认值为1MB。backlog_size
-设置http服务器待办事项大小的整数。默认值为10,000您必须配置至少一个软件包或组件。
您还可以在jersey
json字段下将jersey配置分组:
{ "jersey": { "host": "<host>", "packages": "<packages>" .... } }
{ "resources": ["com.englishtown.vertx.jersey.resources"] }
{ "host": "localhost", "port": 8080, "base_path": "/rest", "resources": ["com.englishtown.vertx.jersey.resources", "com.englishtown.vertx.jersey.resources2"], "features": ["org.glassfish.jersey.jackson.JacksonFeature"], "binders": ["com.englishtown.vertx.jersey.AppBinder"] }
该javax.ws.rs.core.Context
注释可用于物体注入vert.x到资源构造,场,或方法参数。支持的vert.x对象包括
io.vertx.core.http.HttpServerRequest
io.vertx.core.http.HttpServerResponse
io.vertx.core.streams.ReadStream<io.vertx.core.http.HttpServerRequest>
io.vertx.core.Vertx
要注入自定义对象,必须在配置中提供一个或多个活页夹。请参阅注入示例项目。
JerseyVerticle需要依赖项注入。提供Guice和HK2粘合剂:
com.englishtown.vertx.guice.GuiceJerseyBinder
com.englishtown.vertx.hk2.HK2JerseyBinder
请参阅示例目录以获取可运行的hk2和guice示例。
如果使用vertx-guice,请确保vertx-guice jar位于类路径上,以便vert.x注册GuiceVerticleFactory
。
注意:需要Guice Multibindings扩展。
如果使用vertx-hk2,请确保vertx-hk2 jar在类路径上,以便vert.x注册HK2VerticleFactory
。
注意:如果您使用的是vertx-mod-hk2,请确保您使用的是1.7.0或更高版本。
@GET @Produces(MediaType.APPLICATION_JSON) public void getQuery( @Suspended final AsyncResponse response, @Context ContainerRequest jerseyRequest, @Context HttpServerRequest vertxRequest, @Context Vertx vertx) { vertx.runOnLoop(new Handler<Void>() { @Override public void handle(Void aVoid) { response.resume("Hello World!"); } }); }
promises包提供when.java包装器来创建JerseyServer。您必须提供when.java依赖项。
以下示例假定com.englishtown.vertx.jersey.promises.WhenJerseyServer
已使用com.englishtown.vertx.hk2.WhenHK2JerseyBinder
with vertx-hk2模块注入了实例。
@Override public void start(Future<Void> startedResult) throws Exception { JsonObject jerseyConfig = vertx.getOrCreateContext().config().getJsonObject("jersey"); jerseyServer.createServer(jerseyConfig) .then(server -> { startedResult.complete(); return null; }) .otherwise(t -> { startedResult.fail(t); return null; }); }
原文:https://www.cnblogs.com/endv/p/12031349.html