public static Map<String, FormUrlEncoded.FormPart> read(String body) {
        var parts = new HashMap<String, FormUrlEncoded.FormPart>();
        for (var s : body.split("&")) {
            if (s.isBlank()) {
                continue;
            }
            var pair = s.split("=");
            var name = URLDecoder.decode(pair[0].trim(), StandardCharsets.UTF_8);
            var part = parts.computeIfAbsent(name, n -> new FormUrlEncoded.FormPart(n, new ArrayList<>()));
            if (pair.length > 1) {
                var value = URLDecoder.decode(pair[1].trim(), StandardCharsets.UTF_8);
                part.values().add(value);
            }
        }
        return parts;
    }
@Test
    void testNoValue() {
        var string = "val1=2112&val1=3232&val2";

        var map = FormUrlEncodedServerRequestMapper.read(string);

        assertThat(map)
            .hasSize(2)
            .hasEntrySatisfying("val1", v -> assertThat(v.values()).containsExactly("2112", "3232"))
            .hasEntrySatisfying("val2", v -> assertThat(v.values()).isEmpty());
    }