2
String url = serverUrl + metadata.getUri();
response = restTemplate.exchange(url, metadata.getAction(), requestEntity, metadata.getResponseType());

url contains the string

https://localhost/api/fm/info/dump/a\b\f\20170722_225714.jpg?lastModified=1507881481909

Spring RestTemplate encodes it to the following when requesting to server

https://localhost/api/fm/info/dump/a%5Cb%5Cf%5C20170722_225714.jpg?lastModified=1507881481909

FYI, I need to disable URL encoding so that the '\' characters are available on server side as it is a business requirement since our web server (Nginx) has been configured to perform some checks based on the path of the request containing '\' character.

Anirban Das
  • 71
  • 2
  • 6
  • 1
    Possible duplicate of [How to disable encoding using RestTemplate](https://stackoverflow.com/questions/34267371/how-to-disable-encoding-using-resttemplate) – Minjun Yu Nov 21 '17 at 21:03

1 Answers1

10

Create a Configuration class and add the following code:

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        DefaultUriBuilderFactory defaultUriBuilderFactory = new DefaultUriBuilderFactory();
        defaultUriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.setUriTemplateHandler(defaultUriBuilderFactory);
        return restTemplate;
    }
}

Then Autowire your RestTemplate in any class through constructor injection.

ℛɑƒæĿᴿᴹᴿ
  • 4,983
  • 4
  • 38
  • 58
Tanmay Naik
  • 586
  • 1
  • 4
  • 16