URL路径参数编码

时间:2016-03-29 19:21:11

标签: java tomcat encoding retrofit2 okhttp3

我正在努力使用改进的路径参数编码:

  • http://localhost:8080/nuxeo/api/v1是我的基本网址。
  • 我有这个电话@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限制了他的网址验证:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-0450

所以我想在我的路径参数中直接发送'/'而不在%2F中对其进行编码。我怎样才能实现它?

谢谢!

1 个答案:

答案 0 :(得分:0)

parent-2.0.0-beta4起,@Path注释的参数现在正常运行。