formFieldMultiMap

formFieldMultiMap

Description

Extracts all HTTP form fields at once as a multi-map of type Map<String, <List<String>> mapping a form name to a list of all its values.

This directive can be used if form fields can occur several times.

The order of values is not specified.

Warning

Use of this directive can result in performance degradation or even in OutOfMemoryError s.

Example

final Function<Map<String, List<String>>, String> mapToString = map ->
  map.entrySet()
    .stream()
    .map(e -> e.getKey() + " -> " + e.getValue().size())
    .collect(Collectors.joining(", "));

final Route route = formFieldMultiMap(fields ->
  complete("There are form fields " + mapToString.apply(fields))
);

// test:
final FormData formDataDiffKey =
  FormData.create(
    Pair.create("color", "blue"),
    Pair.create("count", "42"));
testRoute(route).run(HttpRequest.POST("/").withEntity(formDataDiffKey.toEntity()))
  .assertEntity("There are form fields color -> 1, count -> 1");

final FormData formDataSameKey =
  FormData.create(
    Pair.create("x", "23"),
    Pair.create("x", "4"),
    Pair.create("x", "89"));
testRoute(route).run(HttpRequest.POST("/").withEntity(formDataSameKey.toEntity()))
  .assertEntity("There are form fields x -> 3");

Contents