[解決済み] 既存のURLにクエリパラメータを追加するにはどうすればよいですか?
2023-06-04 22:11:39
質問
既存のURLにクエリパラメータとしてKey-Valueペアを追加したいです。URLにクエリ部分があるかフラグメント部分があるかをチェックし、if節をいくつも飛び越えて追加することでこれを行うことができますが、Apache Commonsライブラリまたは同等の何かを通してこれを行う場合、きれいな方法があるのではないかと思っていました。
http://example.com
は
http://example.com?name=John
http://example.com#fragment
は
http://example.com?name=John#fragment
http://[email protected]
は
http://[email protected]&name=John
http://[email protected]#fragment
は
http://[email protected]&name=John#fragment
このシナリオはこれまでに何度も実行したことがあり、URLを何らかの方法で壊すことなくこれを行いたいと思います。
どのように解決するのですか?
これは java.net.URI クラスを使用して、既存のインスタンスから部品を使用して新しいインスタンスを構築することによって行うことができ、これは URI 構文に準拠していることを保証するはずです。
クエリ部分はNULLか既存の文字列となるので、&で別のパラメータを追加するか、新しいクエリを開始するかを決定します。
public class StackOverflow26177749 {
public static URI appendUri(String uri, String appendQuery) throws URISyntaxException {
URI oldUri = new URI(uri);
String newQuery = oldUri.getQuery();
if (newQuery == null) {
newQuery = appendQuery;
} else {
newQuery += "&" + appendQuery;
}
return new URI(oldUri.getScheme(), oldUri.getAuthority(),
oldUri.getPath(), newQuery, oldUri.getFragment());
}
public static void main(String[] args) throws Exception {
System.out.println(appendUri("http://example.com", "name=John"));
System.out.println(appendUri("http://example.com#fragment", "name=John"));
System.out.println(appendUri("http://[email protected]", "name=John"));
System.out.println(appendUri("http://[email protected]#fragment", "name=John"));
}
}
より短い代替案
public static URI appendUri(String uri, String appendQuery) throws URISyntaxException {
URI oldUri = new URI(uri);
return new URI(oldUri.getScheme(), oldUri.getAuthority(), oldUri.getPath(),
oldUri.getQuery() == null ? appendQuery : oldUri.getQuery() + "&" + appendQuery, oldUri.getFragment());
}
出力
http://example.com?name=John
http://example.com?name=John#fragment
http://[email protected]&name=John
http://[email protected]&name=John#fragment
関連
-
[解決済み] jQueryやJavaScriptを使用してURLパラメータを取得するには?
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] ページを再読み込みせずにURLを変更するにはどうすればよいですか?
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] JavaScriptでクエリ文字列の値を取得するにはどうすればよいですか?
-
[解決済み] アプリケーションからAndroidのWebブラウザでURLを開くにはどうすればよいですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] クエリ文字列パラメータのJava URLエンコーディング
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
Jsoup-Crawlingの動作
-
List list = new ArrayList(); Error: ArrayList は型に解決できません。
-
CertificateException: XXXに一致するサブジェクトの代替DNS名が見つかりません 解決策
-
代入の左辺は変数でなければならない 解答
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
Web Project JavaでPropertiesファイルを読み込むと、「指定されたファイルがシステムで見つかりません」というソリューションが表示されます。
-
java 365*1000*60*60*24 計算問題
-
CAS 5.1.8でhttpをサポートし、認証されていない認可サービスエラーのプロンプトが表示される問題を解決した。
-
[解決済み] JavaでURLやURIを構成する慣用的な方法は何ですか?