Spring 用UricomponentsBuilder替换弹簧中%20的空间

Spring 用UricomponentsBuilder替换弹簧中%20的空间,spring,spring-boot,Spring,Spring Boot,我有一个方法,它接受一些参数并从中形成一个URI,以便访问我们的客户机REST服务。其中一个参数可能是一个空格。问题是UriComponentsBuilder.pathSegment忽略了空间。所以,让我们说,'v1','v2'。。。将形成URI../v1/v2,而不是/v1/%20/v2。如果我将%20直接传递给pathSegment,它将替换为%2520。这是我的职责 private String getJsonStringFromDetranRestParams(String url,

我有一个方法,它接受一些参数并从中形成一个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相当的
\\

只需使用
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