我是春天的新人。
我正在嘗試使用 webclient 從 youtube 的 api 獲取資料
我的服務層看起來像這樣
@Service
public class YoutubeService implements YTB {
private WebClient webClient;
private final String API_KEY="";
public YoutubeService() {
webClient=WebClient.create("https://youtube.googleapis.com/youtube/v3/");
}
public YoutubeService(WebClient webClient) {
this.webClient = webClient;
}
public List<youtubeData> getData(String id){
return webClient.get()
.uri("/videos?part=snippet,statistics&id=" id "&key=" API_KEY)
.retrieve()
.bodyToFlux(youtubeData.class)
.collectList()
.block();
}
}
我的控制器:
@RestController
@RequestMapping("/ytbapi")
public class ytbController {
@Autowired
private YTB service;
@GetMapping("/getData/{id}")
public List<youtubeData> show(@PathVariable String id){
return service.getData(id);
}
}
當我設定它作業正常
uri("/videos?part=snippet&id=" id "&key=" API_KEY")
但是當我把它改成上面那樣運行時,我得到了 HTTP Status 500
請求處理失敗;嵌套例外是 org.springframework.web.reactive.function.client.WebClientResponseException$BadRequest: 400 Bad Request from GET https://youtube.googleapis.com/youtube/v3/videos?part=snippet%2Cstatistics&id=r9LqfLM93Hw&key=AIzaSyDpPf8w8YN4O6KSiedVUwusiPhU- HP4Iek
問題是在這部分添加了 25:snippet%2Cstatistics
我應該如何解決它?
uj5u.com熱心網友回復:
在您的 URI 字串"/videos?part=snippet,statistics&id=" id "&key=" API_KEY中,您有一個字符“%”,它具有所謂的保留含義。
uri(String uri, Object... uriVariables)類的方法在后臺默認UriSpec使用DefaultUriBuilderFactory ,默認情況下使用UriComponentsBuilder'sencode()方法。因此,符號“% ”在您的 URI 中被編碼為“%” 。
您可以在此處檢查編碼了哪些符號以及編碼的內容。
您在 URI 中使用了“,”,所以我相信您的意思是“,”。
由于 URL 編碼是 的默認行為WebClient,您可以使用如下簡單的逗號以未編碼的方式定義您的 uri 路徑:
.uri("/videos?part=snippet,statistics&id=" id "&key=" API_KEY)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/513231.html
上一篇:啟動SpringBoot時出錯-無法自省類[org.springframework.security.config.annotation.web.configuration.WebSecurityCo
