diff --git a/.gitignore b/.gitignore index 2db80e9..65003de 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /.idea /out /*.iml +/target + diff --git a/README.MD b/README.MD index 5f86a25..e9166bd 100644 --- a/README.MD +++ b/README.MD @@ -4,7 +4,7 @@ # Использование ### Сборщик параметров ```java -Map> uriQueryMap = new LinkedHashMap<>( +Map> uriQueryMap = new HashMap<>( Map.ofEntries( Map.entry("param1", List.of("value1.1")), Map.entry("param2", List.of("значение2.1")), diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..f9b7cf0 --- /dev/null +++ b/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + + dev.kalenchukov + uriquery + + URIQuery + Сборщик / разборщик параметров URI + 1.0.0 + https://github.com/kalenchukov/URIQuery + + + + MIT License + https://opensource.org/licenses/MIT + + + + + + kalenchukov + Алексей Каленчуков + aleksey.kalenchukov@yandex.ru + + + + + 16 + 16 + UTF-8 + + + + + org.jetbrains + annotations + 23.0.0 + + + \ No newline at end of file diff --git a/src/dev/kalenchukov/uriquery/UriQuery.java b/src/main/java/dev/kalenchukov/uriquery/UriQuery.java similarity index 56% rename from src/dev/kalenchukov/uriquery/UriQuery.java rename to src/main/java/dev/kalenchukov/uriquery/UriQuery.java index c5073f2..c0e4291 100644 --- a/src/dev/kalenchukov/uriquery/UriQuery.java +++ b/src/main/java/dev/kalenchukov/uriquery/UriQuery.java @@ -12,6 +12,8 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public final class UriQuery { @@ -22,45 +24,42 @@ private UriQuery() {} * * @param uriQueryEncode закодированные параметры URI * @return карту параметров и их значений - * @throws IllegalArgumentException если переданы некорректный формат параметров URI */ - public static Map> parse(String uriQueryEncode) throws IllegalArgumentException + public static @NotNull Map> parse(@Nullable String uriQueryEncode) { - Map> params = new LinkedHashMap<>(); + Map> queryParams = new HashMap<>(); - if (uriQueryEncode != null && uriQueryEncode.length() > 0) - { - for (String groupParam : uriQueryEncode.split("&")) - { - Pattern pattern = Pattern.compile("(?.+(\\[\\])?)=(?.*)", Pattern.CASE_INSENSITIVE); - Matcher matcher = pattern.matcher(groupParam); + if (uriQueryEncode == null || uriQueryEncode.length() < 3) { + return queryParams; + } - if (!matcher.matches()) - { - throw new IllegalArgumentException("Not correct query"); - } + for (String groupParam : uriQueryEncode.split("&")) + { + Pattern pattern = Pattern.compile("(?[a-z0-9_\\-.+,|:]+(\\[\\])?)=(?.*)", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(groupParam); - String keyGroup = URLDecoder.decode(matcher.group("key"), StandardCharsets.UTF_8); + if (matcher.matches()) + { + String paramGroup = matcher.group("param").toLowerCase(); String valueGroup = URLDecoder.decode(matcher.group("value"), StandardCharsets.UTF_8); - List paramValues = new ArrayList<>(); + List queryParamValues = new ArrayList<>(); - if (keyGroup.contains("[]")) + if (paramGroup.contains("[]")) { - keyGroup = keyGroup.replace("[]", ""); + paramGroup = paramGroup.replace("[]", ""); - if (params.containsKey(keyGroup)) - { - paramValues = params.get(keyGroup); + if (queryParams.containsKey(paramGroup)) { + queryParamValues = queryParams.get(paramGroup); } } - paramValues.add(valueGroup); - params.put(keyGroup, paramValues); + queryParamValues.add(valueGroup); + queryParams.put(paramGroup, queryParamValues); } } - return params; + return queryParams; } /** @@ -69,7 +68,7 @@ public static Map> parse(String uriQueryEncode) throws Ille * @param params карта параметров и их значений * @return закодированные параметры URI */ - public static String compose(Map> params) + public static @NotNull String compose(@NotNull Map> params) { StringBuilder uriQuery = new StringBuilder(); @@ -77,27 +76,23 @@ public static String compose(Map> params) for (Map.Entry> groupParam : params.entrySet()) { - if (needSeparator) - { + if (needSeparator) { uriQuery.append("&"); } for (int elm = 0; elm < groupParam.getValue().size(); elm++) { - if (elm > 0) - { + if (elm > 0) { uriQuery.append("&"); } uriQuery.append(URLEncoder.encode(groupParam.getKey(), StandardCharsets.UTF_8)); - if (groupParam.getValue().size() > 1) - { + if (groupParam.getValue().size() > 1) { uriQuery.append("[]"); } uriQuery.append("="); - uriQuery.append(URLEncoder.encode(groupParam.getValue().get(elm), StandardCharsets.UTF_8)); } diff --git a/src/dev/kalenchukov/uriquery/package-info.java b/src/main/java/dev/kalenchukov/uriquery/package-info.java similarity index 58% rename from src/dev/kalenchukov/uriquery/package-info.java rename to src/main/java/dev/kalenchukov/uriquery/package-info.java index f091fcb..b197977 100644 --- a/src/dev/kalenchukov/uriquery/package-info.java +++ b/src/main/java/dev/kalenchukov/uriquery/package-info.java @@ -1,9 +1,15 @@ +/* + * Copyright © 2022 Алексей Каленчуков + * GitHub: https://github.com/kalenchukov + * E-mail: mailto:aleksey.kalenchukov@yandex.ru + */ + /** * Сборщик / разборщик параметров URI * * @author Алексей Каленчуков * @copyright © 2021 Алексей Каленчуков - * @package URLQuery - * @version 21.8.24 + * @package Lemna + * @version 1.1.0 */ package dev.kalenchukov.uriquery; diff --git a/src/dev/kalenchukov/uriquery/test/Main.java b/src/main/java/dev/kalenchukov/uriquery/test/Main.java similarity index 100% rename from src/dev/kalenchukov/uriquery/test/Main.java rename to src/main/java/dev/kalenchukov/uriquery/test/Main.java