From ba8122b2546f0e579fa2173d7e3f836d954dca2f Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Fri, 11 Jul 2025 15:12:52 -0400 Subject: [PATCH 1/2] relax sse accept header Now will not throw an exception for multivalue accept headers --- .../src/main/java/io/avaje/jex/http/sse/SseHandler.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/avaje-jex/src/main/java/io/avaje/jex/http/sse/SseHandler.java b/avaje-jex/src/main/java/io/avaje/jex/http/sse/SseHandler.java index 4ceea3b4..f841a310 100644 --- a/avaje-jex/src/main/java/io/avaje/jex/http/sse/SseHandler.java +++ b/avaje-jex/src/main/java/io/avaje/jex/http/sse/SseHandler.java @@ -2,6 +2,7 @@ import java.io.IOException; import java.io.UncheckedIOException; +import java.util.Optional; import java.util.function.Consumer; import io.avaje.jex.core.Constants; @@ -22,7 +23,9 @@ final class SseHandler implements ExchangeHandler { @Override public void handle(Context ctx) throws Exception { - if (!TEXT_EVENT_STREAM.equals(ctx.header(Constants.ACCEPT))) { + if (!Optional.ofNullable(ctx.header(Constants.ACCEPT)) + .filter(s -> s.contains(TEXT_EVENT_STREAM)) + .isPresent()) { throw new BadRequestException("SSE Requests must have an 'Accept: text/event-stream' header"); } final var exchange = ctx.exchange(); From cc5361077e71c4a02912695345863389e97c5fc7 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Fri, 11 Jul 2025 15:15:45 -0400 Subject: [PATCH 2/2] Update SseHandler.java --- .../main/java/io/avaje/jex/http/sse/SseHandler.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/avaje-jex/src/main/java/io/avaje/jex/http/sse/SseHandler.java b/avaje-jex/src/main/java/io/avaje/jex/http/sse/SseHandler.java index f841a310..b2ec082f 100644 --- a/avaje-jex/src/main/java/io/avaje/jex/http/sse/SseHandler.java +++ b/avaje-jex/src/main/java/io/avaje/jex/http/sse/SseHandler.java @@ -23,11 +23,13 @@ final class SseHandler implements ExchangeHandler { @Override public void handle(Context ctx) throws Exception { - if (!Optional.ofNullable(ctx.header(Constants.ACCEPT)) + Optional.ofNullable(ctx.header(Constants.ACCEPT)) .filter(s -> s.contains(TEXT_EVENT_STREAM)) - .isPresent()) { - throw new BadRequestException("SSE Requests must have an 'Accept: text/event-stream' header"); - } + .orElseThrow( + () -> + new BadRequestException( + "SSE Requests must have an 'Accept: text/event-stream' header")); + final var exchange = ctx.exchange(); final var headers = exchange.getResponseHeaders(); headers.add(Constants.CONTENT_TYPE, TEXT_EVENT_STREAM);