2016-07-14 4 views
0

Я использую весну RestTemplate.exchange(URI).utf-8 кодировать параметры URL для resttemplate

Ури был собран с UriComponentsBuilder. один из моих запросов был Params query=München

Если я беру URL, генерируемые из бревен, и использовать его с завитком, он работает. Когда я разрешаю шаблону отдыха запустить запрос, это не так.

Что-то про умлаут, не получив кодировку?

Как мне получить UriCompenentsBuilder и/или RestTemplate, чтобы справиться с умлаутом?

Я знаю, что могу использовать строку URL с RestTemplate который выглядит следующим образом:

query=M%C3%BCnchen

и что работает.

+0

Когда я записываю 'UriComponentsBuilder.buildAndExpand (« München »). ToUri()' Я вижу 'München' в выводе журнала, но когда я вызываю' RestTemplate.exchange() ', серверы получают' GET/resource? Query = M% C3% BCnchen HTTP/1.1'. Вы уверены, что сервер не получает 'query = M% C3% BCnchen'? –

+0

Это потому, что я использую Apache 'HttpClient'. См. Мой ответ. –

ответ

0

Это происходит, когда RestTemplate инициализируется с запросом Spring по умолчанию фабрики (SimpleClientHttpRequestFactory), например:

RestTemplate restTemplate = new RestTemplate(); 

Replace запрос по умолчанию завод с HttpComponentsClientHttpRequestFactory и Apache HttpClient:

CloseableHttpClient httpClient = HttpClientBuilder 
      .create() 
      .build(); 
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient); 
    restTemplate = new RestTemplate(factory); 

Тогда звоните restTemplate.exchange(), как вы как правило.

Смежные вопросы