如何使用RestTemplate禁用编码

时间:2015-12-14 12:43:12

标签: java spring spring-mvc resttemplate

我正在使用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。

如果有人能指出禁用编码的正确方法,我真的很感激。

感谢。

2 个答案:

答案 0 :(得分:3)

来自UriComponentsBuilder文档的

,存在方法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;
}