huw*_*uwr 19 java spring resttemplate
我正在成功使用Spring RestTemplate:
String url = "http://example.com/path/to/my/thing/{parameter}";
ResponseEntity<MyClass> response = restTemplate.postForEntity(url, payload, MyClass.class, parameter);
Run Code Online (Sandbox Code Playgroud)
这很好.
但是,有时候parameter
是%2F
.我知道这不是理想的,但事实就是如此.正确的URL应该是:http://example.com/path/to/my/thing/%2F
但是当我设置parameter
为"%2F"
它时,双重转义为http://example.com/path/to/my/thing/%252F
.我该如何防止这种情况?
Sot*_*lis 31
而不是使用String
URL,用a 构建URI
一个UriComponentsBuilder
.
String url = "http://example.com/path/to/my/thing/";
String parameter = "%2F";
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url).path(parameter);
UriComponents components = builder.build(true);
URI uri = components.toUri();
System.out.println(uri); // prints "http://example.com/path/to/my/thing/%2F"
Run Code Online (Sandbox Code Playgroud)
使用UriComponentsBuilder#build(boolean)
指示
是否所有在此构建器中设置的组件都是encoded(
true
)或不是(false
)
这或多或少等同于自己替换{parameter}
和创建URI
对象.
String url = "http://example.com/path/to/my/thing/{parameter}";
url = url.replace("{parameter}", "%2F");
URI uri = new URI(url);
System.out.println(uri);
Run Code Online (Sandbox Code Playgroud)
然后,您可以将此URI
对象用作方法的第一个参数postForObject
.
rou*_*ble 10
您可以告诉其余模板您已经编码了uri.这可以使用UriComponentsBuilder.build(true)完成.这样休息模板将不会重新尝试逃避uri.其余大多数模板api都会接受URI作为第一个参数.
String url = "http://example.com/path/to/my/thing/{parameter}";
url = url.replace("{parameter}", "%2F");
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url);
// Indicate that the components are already escaped
URI uri = builder.build(true).toUri();
ResponseEntity<MyClass> response = restTemplate.postForEntity(uri, payload, MyClass.class, parameter);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14530 次 |
最近记录: |