【问题标题】:Replace space for %20 in Spring with UriCompnentsBuilder用 UriCompnentsBuilder 替换 Spring 中 %20 的空间
【发布时间】:2018-06-09 01:42:33
【问题描述】:

我有一个方法,它接受一些参数并从中形成一个 URI,以便访问我们的客户端 REST 服务。这些参数之一可能会出现空格。问题是 UriComponentsBuilder.pathSegment 忽略了空间。因此,假设'v1', ' ', 'v2'... 将形成 URI .../v1/v2 而不是 /v1/%20/v2。如果我将%20 直接传递给pathSegment,它将替换为%2520。这是我的功能

 private String getJsonStringFromDetranRestParams(String url, String... params) {

    URI targetUrl = UriComponentsBuilder.fromUriString(url).pathSegment(params).build().encode().toUri();
    String json = restTemplate.getForObject(targetUrl, String.class);

    return json;
}

函数中是否有任何类型的“转义字符”,因此它将%20 视为有效字符串而不是特殊字符串。我正在寻找 \\ Java 等效项。

【问题讨论】:

    标签: spring spring-boot


    【解决方案1】:

    使用 UriComponentsBuilder 执行此操作的正确方法如下:

    UriComponentsBuilder.fromUriString("http://localhost:8080").encode().build().toUri()
    

    【讨论】:

      【解决方案2】:

      只需使用build() 将其作为字符串返回,pathSegment 中的空格将被忽略,您必须通过 %20

      String targetUrl = UriComponentsBuilder.fromUriString("http://localhost:8080").pathSegment("v1","%20","v2").build().toUriString();
      System.out.println(targetUrl);  //http://localhost:8080/v1/%20/v2
      

      或者使用build(true)编码

       URI targetUrl = UriComponentsBuilder.fromUriString("http://localhost:8080").pathSegment("v1","%20","v2").build(true).toUri();
      System.out.println(targetUrl); ////http://localhost:8080/v1/%20/v2
      

      【讨论】:

        猜你喜欢
        • 2012-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-16
        • 1970-01-01
        • 2014-08-19
        • 1970-01-01
        相关资源
        最近更新 更多