1. 程式人生 > 其它 >springboot RestTemplate get請求引數中加號變成空格問題

springboot RestTemplate get請求引數中加號變成空格問題

看到問題,要尋其本質,切莫只求表面的結果

RestTemplate rest = new RestTemplateBuilder().build();
Map<String,String> m = new HashMap<>();
m.put("args","abc+124");
rest.getForEntity("http://xxx",Object.class,m);

以上程式碼,後臺接收到的引數是“abc 124”,加號變成了空格。

遇到這個問題,不少人都會進行,特殊字元的替換,然後再在後端替換回來。

實際上,國內不少論壇的帖子也是這麼寫的。

所以,除非知道些質量高的論壇,還是搜外文網站,看結果吧。

Encoding of URI Variables on RestTemplate [SPR-16202]

A simpler solution is to set the encoding mode on the URI builder to VALUES_ONLY

DefaultUriBuilderFactory builderFactory = new DefaultUriBuilderFactory();
builderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
RestTemplate rest = new RestTemplateBuilder()
.rootUri("http://xxx")
.uriTemplateHandler(builderFactory)
.build();

用這種方式構造RestTemplate,加號就不會丟了。