【问题标题】:Java Spring resttemplate character encoding for query param用于查询参数的 Java Spring resttemplate 字符编码
【发布时间】:2020-11-01 00:55:03
【问题描述】:

我正在使用 Java Spring Resttemplate 通过 get 请求获取 json。查询参数值可以包含俄语字符。在这种情况下,我不会从 API 接收数据。

我的代码:

URI uri = UriComponentsBuilder.fromHttpUrl(url)
        .path("/resume")
        .queryParam("text", "Java-разработчик")
        .build()
        .toUri();

log.info("URI: " + uri);

日志:

https://api.link.com/resume?text=Java-%D0%A1%D0%82%D0%A0%C2%B0%D0%A0%C2%B7%D0%A1%D0%82%D0%A0%C2%B0%D0%A0%C2%B1%D0%A0%D1%95%D0%A1%E2%80%9A%D0%A1%E2%80%A1%D0%A0%D1%91%D0%A0%D1%94

我也试过这个,但没有帮助:

1) 
restTemplate.getMessageConverters()
        .add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));
2) 
URI uri = UriComponentsBuilder.fromHttpUrl(url)
        .path("/resume")
        .queryParam("text", URLEncoder.encode("Java-разработчик", HTTP.UTF-8))
        .build()
        .toUri();

怎样做才能使俄语字符不发生变化并直接与它们一起发送请求?

也就是说,最终请求应该是这样的:

https://api.link.com/resume?text=Java-разработчик

【问题讨论】:

标签: java encryption character-encoding resttemplate


【解决方案1】:

问题出在编码上。只有将encode(StandardCharsets.UTF_8) 用于UriComponentsBuilder 才能帮助安装UTF-8

URI uri = UriComponentsBuilder.fromHttpUrl(url)
        .path("/resume")
        .queryParam("text", "Java-разработчик")
        .encode(StandardCharsets.UTF_8)
        .build()
        .toUri();

为什么queryParam("text", URLEncoder.encode(myString, HTTP.UTF-8)) 不起作用仍然是一个很大的谜。

【讨论】:

    猜你喜欢
    • 2015-02-20
    • 2015-03-02
    • 1970-01-01
    • 2012-06-02
    相关资源
    最近更新 更多