package com.jetdrone.vertx.yoke.middleware; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.jetbrains.annotations.NotNull; import io.vertx.core.Handler; import com.jetdrone.vertx.yoke.Middleware; /** * <p> * A simple {@link Middleware} that allows adding custom response headers to all * {@link YokeResponse}. * </p> * <p> * Example: * </p> * * <pre> * {@code * yoke.use(new ResponseHeaders() * .with("X-Build-Meta", "1.0-SNAPSHOT") * .with("X-Server-Id", "server-123")); * } * </pre> */ public class ResponseHeaders extends Middleware { private final Map<CharSequence, CharSequence[]> headers; public ResponseHeaders() { headers = new HashMap<>(); } public ResponseHeaders with(final CharSequence name, final CharSequence... values) { headers.put(name, values); return this; } @Override public void handle(@NotNull final YokeRequest request, @NotNull final Handler<Object> next) { for (final Entry<CharSequence, CharSequence[]> header : headers.entrySet()) { request.response().headers().add(header.getKey(), Arrays.asList(header.getValue())); } next.handle(null); } }