Spring WebClient调用YouTube API时URL自动转义致400错误的解决
解决WebClient调用YouTube API时参数%2C被重复转义的问题
问题出在你手动对逗号进行了URL编码(写成%2C),但WebClient会自动对URI中的参数进行编码,导致%2C被再次转义成%252C,YouTube API无法识别这个错误的参数格式,所以返回400/500错误。
直接用下面几种方法修复:
方法1:使用逗号分隔参数值,让WebClient自动编码
不需要手动写%2C,直接用逗号把snippet和statistics拼在一起,WebClient会自动将逗号编码为%2C,避免二次转义。示例代码:webClient.get() .uri(uriBuilder -> uriBuilder .path("/youtube/v3/videos") .queryParam("part", "snippet,statistics") .queryParam("id", "你的视频ID") .queryParam("key", "你的API密钥") .build()) .retrieve() .bodyToMono(你的响应实体类.class);方法2:用UriComponentsBuilder构建URI
借助Spring的UriComponentsBuilder来构建完整请求地址,它会正确处理参数编码,避免手动拼接的错误:UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl("https://www.googleapis.com/youtube/v3/videos") .queryParam("part", "snippet,statistics") .queryParam("id", "你的视频ID") .queryParam("key", "你的API密钥") .build(); webClient.get() .uri(uriComponents.toUri()) .retrieve() .bodyToMono(你的响应实体类.class);方法3:手动编码参数(不推荐)
如果一定要手动处理编码,可以用Spring提供的UriUtils工具类对参数值单独编码,再拼到URI里:String partParam = UriUtils.encodeQueryParam("snippet,statistics", StandardCharsets.UTF_8); webClient.get() .uri("https://www.googleapis.com/youtube/v3/videos?part=" + partParam + "&id=你的视频ID&key=你的API密钥") .retrieve() .bodyToMono(你的响应实体类.class);
核心原则是:不要手动编码URI参数,交给Spring的工具类或WebClient自动处理,这样就能彻底避免重复编码的问题。
内容的提问来源于stack exchange,提问作者Kien Nguyen
相关产品推荐
相关产品推荐

