私は、クエリ文字列を操作するためにjava.net.URIを使用しようとしましたが、あるURLからクエリ文字列を取得して別のURLに配置するような非常に単純なタスクでも失敗しました。java.net.URIの使い方
あなたが仕事
の下にこのコードを作成する方法URI sample = new URI("test?param1=x%3D1");
URI uri2 = new URI(
"http",
"domain",
"/a-path",
sample.getRawQuery(),
sample.getFragment());
を知っています
uri2.toASCIIString()
へのコールが返す必要があり
:http://domain/a-path?param1=x%3D1
それが返されます:http://domain/a-path?param1=x%253D1
(ダブルエンコーディング)
私はgetQueryを(使用する場合)の代わりに、 getRawQuery()クエリ文字列はまったくエンコードされず、URLは次のようになります。http://domain/a-path?param1=x=1
したがって、URIインターフェイスは設計が貧弱です(2番目のコンストラクタの理由はほとんど分かりません)。より良いURIクラスを知っていますか?日付/カレンダークラスを置き換えるjoda-timeのように? –
いいえ、私は...そして、 'URI'はすでに独自の問題を抱えている古い' java.net.URL'クラスの再作成です。 – Jesper