diff options
Diffstat (limited to 'src/main/java/moe/nea/prickly/util/QueryParameterHelper.java')
| -rw-r--r-- | src/main/java/moe/nea/prickly/util/QueryParameterHelper.java | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/main/java/moe/nea/prickly/util/QueryParameterHelper.java b/src/main/java/moe/nea/prickly/util/QueryParameterHelper.java new file mode 100644 index 0000000..191dae8 --- /dev/null +++ b/src/main/java/moe/nea/prickly/util/QueryParameterHelper.java @@ -0,0 +1,28 @@ +/* (C) 2025 Linnea Gräf - Licensed to everyone under the BSD 3 Clause License */ +package moe.nea.prickly.util; + +import com.google.common.net.UrlEscapers; +import java.net.URI; +import java.util.Map; +import org.jspecify.annotations.Nullable; + +public class QueryParameterHelper { + public static URI appendQuery(URI uri, Map<String, @Nullable String> extraArgs) { + var uriBuilder = new StringBuilder(); + uriBuilder.append(uri); + var escaper = UrlEscapers.urlFormParameterEscaper(); + var first = true; + for (var entry : extraArgs.entrySet()) { + if (entry.getValue() == null) continue; + if (first) { + char c = uriBuilder.charAt(uriBuilder.length() - 1); + if (c != '?' && c != '&') uriBuilder.append((uri.getQuery() == null) ? '?' : '&'); + first = false; + } else { + uriBuilder.append('&'); + } + uriBuilder.append(escaper.escape(entry.getKey())).append('=').append(escaper.escape(entry.getValue())); + } + return URI.create(uriBuilder.toString()); + } +} |
