2016-07-14 13 views
0

Ich benutze spring RestTemplate.exchange(URI).utf-8 kodieren url parameter für resttemplate

Das URI wurde mit UriComponentsBuilder zusammengebaut. einer meiner Abfrage params war query=München

Wenn ich die aus den Protokollen erzeugt url nehmen und es mit curl verwenden, funktioniert es. Wenn ich Ruhevorlage lasse die Abfrage ausführen, tut es nicht.

Irgendwas über den Umlaut wird nicht codiert?

Wie bekomme ich UriCompenentsBuilder und/oder RestTemplate, um mit dem Umlaut umzugehen?

Ich weiß, dass ich einen String url mit RestTemplate verwenden, die wie folgt aussieht:

query=M%C3%BCnchen

und das funktioniert.

+0

Wenn ich 'UriComponentsBuilder.buildAndExpand (" München ") protokolliere. ToUri()' Ich sehe "München" in der Protokollausgabe, aber wenn ich 'RestTemplate.exchange()' aufruft, erhält der Server 'GET/resource? Query = M% C3% BCnchen HTTP/1.1'. Sind Sie sicher, dass der Server 'query = M% C3% BCnchen' nicht empfängt? –

+0

Es ist, weil ich Apache 'HttpClient' verwende. Siehe meine Antwort. –

Antwort

0

Es passiert, wenn RestTemplate mit Federstandard Anfrage Werk initialisiert (SimpleClientHttpRequestFactory), zB:

RestTemplate restTemplate = new RestTemplate(); 

Standard Anfrage Fabrik Ersetzen mit HttpComponentsClientHttpRequestFactory und Apache HttpClient:

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

Dann rufen Sie restTemplate.exchange(), wie Sie würde normalerweise.