Skip to content

Commit

Permalink
Fixes case insensitive headerMap
Browse files Browse the repository at this point in the history
Makes map returned by headerMap consistent with header() method.
  • Loading branch information
froque committed Sep 5, 2024
1 parent 22a0f5a commit 75a4313
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 2 deletions.
2 changes: 1 addition & 1 deletion jooby/src/main/java/io/jooby/Context.java
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ public interface Context extends Registry {
/**
* Header as single-value map.
*
* @return Header as single-value map.
* @return Header as single-value map, with case insensitive keys.
*/
@NonNull Map<String, String> headerMap();

Expand Down
6 changes: 5 additions & 1 deletion jooby/src/main/java/io/jooby/DefaultContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.TreeMap;
import java.util.stream.Collectors;

import org.slf4j.Logger;
Expand Down Expand Up @@ -221,7 +222,10 @@ default boolean matches(String pattern) {

@Override
@NonNull default Map<String, String> headerMap() {
return header().toMap();
final var header = header();
Map<String, String> map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
header.toMultimap().forEach((k, v) -> map.put(k, v.get(0)));
return map;
}

@Override
Expand Down
3 changes: 3 additions & 0 deletions tests/src/test/java/io/jooby/test/Issue2357.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ public void headersShouldBeCaseInsensitive(ServerTestRunner runner) {
Assertions.assertEquals("value1", ctx.header("x-header1").value());
Assertions.assertEquals("value1", ctx.header("X-HEADER1").value());
Assertions.assertEquals("value1", ctx.header("X-hEaDeR1").value());
Assertions.assertEquals("value1", ctx.headerMap().get("x-header1"));
Assertions.assertEquals("value1", ctx.headerMap().get("X-HEADER1"));
Assertions.assertEquals("value1", ctx.headerMap().get("X-hEaDeR1"));
return "OK";
}))
.ready(
Expand Down

0 comments on commit 75a4313

Please sign in to comment.