【问题标题】:utf-8 encode url parameters for resttemplateresttemplate 的 utf-8 编码 url 参数
【发布时间】:2016-11-17 20:46:06
【问题描述】:

我正在使用弹簧RestTemplate.exchange(URI)

uri 是用 UriComponentsBuilder 组装的。 我的查询参数之一是 query=München

如果我获取从日志生成的 url,并将其与 curl 一起使用,它就可以工作。 当我让 rest 模板运行查询时,它没有。

关于元音变音未编码的问题?

如何让 UriCompenentsBuilder 和/或 RestTemplate 处理变音符号?

我知道我可以在 RestTemplate 中使用如下所示的字符串 url:

query=M%C3%BCnchen

这行得通。

【问题讨论】:

  • 当我登录UriComponentsBuilder.buildAndExpand("München").toUri() 时,我在日志输出中看到München,但是当我调用RestTemplate.exchange() 时,服务器会收到GET /resource?query=M%C3%BCnchen HTTP/1.1。你确定服务器没有收到query=M%C3%BCnchen
  • 因为我用的是 Apache HttpClient。看我的回答。

标签: java spring utf-8 resttemplate diacritics


【解决方案1】:

RestTemplate 使用 Spring 默认请求工厂 (SimpleClientHttpRequestFactory) 初始化时会发生这种情况,例如:

RestTemplate restTemplate = new RestTemplate();

HttpComponentsClientHttpRequestFactory 和 Apache HttpClient 替换默认请求工厂:

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

然后像往常一样拨打restTemplate.exchange()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2015-06-06
    • 1970-01-01
    • 2014-01-20
    相关资源
    最近更新 更多