[英]Springboot Rest Template query param with special characters
我通過這樣的java代碼調用一個api。
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(myUrl);
builder.queryParam("sandwich","PB_&_J");
return restTemplate.exchange(builder.toUriString(),HttpMethod.GET,MyObject.class);
具有此參數的 api 服務為
@GetMapping("myUrl")
MyObject myApiFunction( @RequestParam String sandwich){
log(sandwich);
//return something
}
沒有正確使用此請求(它在日志中有 '%26' 而不是 '&' )。
但是,如果我以http://myurl?sandwich=PB_%26_J的形式打印builder.toUriString()並通過 Postman 訪問它,則 api 服務會正確使用它。
restTemplate代碼有什么問題?
UriComponentsBuilder.toUriString()
對其變量進行編碼。 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/util/UriComponentsBuilder.html#toUriString--
如果您希望您的參數不編碼,則構建未編碼的 URI,然后將其傳遞給 RestTemplate。
例如,
restTemplate.exchange(builder.build().toUri(), HttpMethod.GET,MyObject.class);
您可以傳遞未編碼的 uri。 但網絡瀏覽器請求編碼的 uri。 因此,我建議您在制作控制器后,在現實世界的瀏覽器中進行測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.