Статьи

Настройка базовых HTTP-заголовков ответов для ресурсов REST в простом приложении на основе Vertx Rest

Я новичок в Vert.x, но, как разработчик Java (умираю), я нахожу его гораздо более приятным и многообещающим по сравнению с NodeJS или чем-то еще — основанными на Reactor средами / библиотеками. Поэтому я собирался реализовать очень простой Restful API, используя Vert.x.

Моя проблема на сегодня заключается в том, что я хотел включить некоторые определенные HttpHeaders в большинство (все) моих ответов. Например, установите тип контента «application / json». В будущем возможно добавлю еще несколько.

Я был как новичок в Vert.x, а потом понял, что то, что в конечном итоге было предложено в этом посте (см. Использование BodyHandler ), действительно сработает для меня.

Итак, у меня было основное Java-приложение VertxMain , в котором я регистрировал MyWebVerticleApp .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
package com.javapapo.vertxweb;
 
import io.vertx.core.Vertx;
import io.vertx.core.VertxOptions;
 
/**
 * Created by <a href="mailto:[email protected]">javapapo</a> on 15/11/15.
 */
public class VertxEngineMain {
    public static void main(String[] args) {
        VertxOptions opts = new VertxOptions();
        Vertx vertx = Vertx.vertx(opts);
        vertx.deployVerticle(new MyWebVerticleApp());
    }
 
 
 
}

Затем я создал небольшой обработчик, я называю его BaseResponseHandler , который в конечном итоге добавляет HttpHeader в мои ответы.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.javapapo.vertxweb.handlers;
 
import io.netty.handler.codec.http.HttpResponse;
import io.vertx.core.Handler;
import io.vertx.core.http.HttpHeaders;
import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.RoutingContext;
 
/**
 * Created by <a href="mailto:[email protected]">javapapo</a> on 27/11/15.
 */
public class BaseResponseHandler implements Handler<RoutingContext>{
 
    @Override
    public void handle(RoutingContext context) {
        HttpServerResponse response = context.response();
        response.putHeader(HttpHeaders.CONTENT_TYPE.toString(), "application/json");
        //other stuff!
        response.setChunked(true);
        context.next();
    }
 
}

Затем в моем MyWebVerticle я просто регистрирую обработчик, который будет вызываться все время, в MyWebVerticle маршрутизатора.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.javapapo.vertxweb;
 
import com.javapapo.vertxweb.handlers.BaseResponseHandler;
import com.javapapo.vertxweb.handlers.StatusHandler;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Future;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Route;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.handler.BodyHandler;
 
/**
 * Created by <a href="mailto:[email protected]">javapapo</a> on 16/11/15.
 */
public class MyWebVerticleApp extends AbstractVerticle {
    @Override
    public void start(Future<Void> fut) {
        HttpServer server = vertx.createHttpServer();
        Router router = Router.router(vertx);
        //enable the base response handler overall!
        router.route().handler(new BaseResponseHandler());
        router.route("/status/").handler(new StatusHandler());
        server.requestHandler(router::accept).listen(8080);
    }
}