【发布时间】:2020-10-05 09:49:18
【问题描述】:
基于问题Spring's UriComponentsBuilder.queryParam issue,如果查询参数的值中有一个加号(“+”)怎么办?默认情况下,加号不会编码。为什么以及如何强制执行此操作?
在我的示例中,我想使用 da ISO 编码的时间戳,并且需要对加号进行编码,因为另一个端点会将“+”解释为空格(“”),这会被时间戳打破。
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("https://example.com/api/")//
.queryParam("date1", "2020-10-05T08:20:00.000+02:00") //
.query("date2=2020-10-05T08:20:00.000+02:00");
System.out.println(builder.build().toString());
// produces https://example.com/api/?date1=2020-10-05T08:20:00.000+02:00&date2=2020-10-05T08:20:00.000+02:00
System.out.println(builder.build().encode().toString());
// produces https://example.com/api/?date1=2020-10-05T08:20:00.000+02:00&date2=2020-10-05T08:20:00.000+02:00
预期结果应将加号编码为2020-10-05T08%3A20%3A00.000%2B02%3A00 或至少将2020-10-05T08:20:00.000%2B02:00 编码为%2B。
【问题讨论】:
-
我发现,使用
RestTemplate时可能会出现问题。我尝试替换硬编码的“+”,但在使用“restTemplate.exchange(...)”后,我的“%”被引用到%20。 -
我找到了解决方案...应该更好地搜索:stackoverflow.com/questions/51676060/…。