我正在使用REST模板故意在请求uri中发送%,例如/items/a%b
String responseEntity = restTemplate.exchange("/items/a%b",
requestObj.getHttpMethod(), requestEntity, String.class);
restTemplate
正在转换此uri的编码并且它变为/items/a%25b
这是有道理的,因为默认情况下其余模板会对uri进行编码。
我尝试使用UriComponent
来禁用uri的编码
UriComponents uriComponents = UriComponentsBuilder.fromPath("/items/a%b").build();
URI uri= uriComponents.toUri();
String responseEntity = restTemplate.exchange(uri,
requestObj.getHttpMethod(), requestEntity, String.class);
但这不起作用,因为uri再次是URI类型进行编码。我确信我没有以正确的方式使用UriComponents。
如果有人能指出禁用编码的正确方法,我真的很感激。
感谢。
答案 0 :(得分:3)
,存在方法build(boolean encoded)
build(boolean encoded)
从中构建一个UriComponents实例 此构建器中包含的各种组件。
UriComponents uriComponents = UriComponentsBuilder.fromPath("/items/a%b").build(true);
答案 1 :(得分:1)
我认为这是在RestTemplate中禁用编码的最佳方法,对我来说很好
@Bean
public RestTemplate getRestTemplate() {
RestTemplate restTemplate = new RestTemplate();
DefaultUriBuilderFactory defaultUriBuilderFactory = new DefaultUriBuilderFactory();
defaultUriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
restTemplate.setUriTemplateHandler(defaultUriBuilderFactory);
return restTemplate;
}