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