0

レトロフィットによるパスパラメータのエンコーディングに苦労しています:

  • http://localhost:8080/nuxeo/api/v1私のベースURLです。
  • 私はこの電話を持っています@GET("path/{documentPath}") Call<Document> fetchDocumentByPath(@Path("documentPath") String docPath);

  • パラメータとして、次のように設定しています。default-domain/blabla

  • Tomcat アプリに対してクエリを実行すると、この回答が得られます

Response{protocol=http/1.1, code=400, message=Bad Request, url=http://localhost:8080/nuxeo/api/v1/path/default-domain%2Fblabla}

  • 「パラメータをエンコードしないでください。既にエンコードされています」と言うために encode = true を入力しても、まだエンコードされています。

  • さらに、レトロフィットでは、次のアサーションを使用すると、このテストretrofit2.RequestBuilderTest#getWithEncodedPathParamは機能しません。Request request = buildRequest(Example.class, "po/ng");assertThat(request.url().toString()).isEqualTo("http://example.com/foo/bar/po/ng/");

セキュリティ上の理由から、Tomcat は URL 検証を制限しています: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-0450

そのため、%2F でエンコードせずに、パス パラメータで「/」を直接送信したいと考えています。どうすれば達成できますか?

ありがとうございました!

4

1 に答える 1

0

以降parent-2.0.0-beta4、 の注釈のパラメータが@Path正しく機能するようになりました。

于 2016-03-30T03:27:43.213 に答える