用UriCompnentsBuilder

时间:2017-12-28 13:47:20

标签: spring spring-boot

我有一个方法,它接受一些参数并从中形成一个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等价物。

1 个答案:

答案 0 :(得分:3)

只需使用build()即可将其返回为String,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