springboot RestTemplate get請求引數中加號變成空格問題
阿新 • • 發佈:2022-06-01
看到問題,要尋其本質,切莫只求表面的結果
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,加號就不會丟了。