3

パスと単一のパラメーターがエンコードされている次のコード サンプルを考えてみましょう...

パラメータ名:「param」

パラメータ値: "foo/bar?aaa=bbb&ccc=ddd" (たまたまクエリ パラメータ付きの URL)

   String test = UriBuilder.fromPath("https://dummy.com").
               queryParam("param", "foo/bar?aaa=bbb&ccc=ddd").
               build().toURL().toString();

返されるエンコードされた URL 文字列は次のとおりです。

 "https://dummy.com?param=foo/bar?aaa%3Dbbb&ccc%3Dddd"

これは正しいです ?

パラメータ値の文字列で文字「&」(または「?」の場合もある) をエンコードするべきではありませんか?

生成された URL は次のように解釈されませんか。

1 つの最初のパラメーター、name="param"、値 = "ar?aaa%3Dbbb"、それに続く 2 番目のパラメーター、name="ccc%3Dddd"、値なし。

4

1 に答える 1

1

「fromPath」への最初の呼び出しは、おそらく「fromUri」であるはずです。そうは言っても...

これは正しいです ?

いいえ、正しい出力のようには見えません。

文字「&」(および「?」でさえも)をパラメータ値文字列にエンコードするべきではありませんか?

はい、そうあるべきです。

生成されたURLは次のように解釈されませんか:

1つの最初のパラメーターname="param"、value = "ar?aaa%3Dbbb"の後に、値のない2番目のパラメーターname = "ccc%3Dddd"が続きます。

最初のパラメータは「foo/bar?aaa = bbb」ですが、はい、正しく解釈しています。これは、javax.ws.rs.coreプロバイダーのバグのようです。

于 2010-05-11T23:27:51.947 に答える