レトロフィットによるパスパラメータのエンコーディングに苦労しています:
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 でエンコードせずに、パス パラメータで「/」を直接送信したいと考えています。どうすれば達成できますか?
ありがとうございました!