我正在尝试通过java中的feign客户端将音频OGG文件字节发送到API端点,但是我收到了400错误请求→“error_message”:“OGG标头尚未找到”。 但是如果文件是从邮递员发送的(具有相同的标头和 OGG 文件),则一切正常。
假客户端:
@FeignClient(name = "${integration[0].speech.name}",
url = "${integration[0].speech.url}",
configuration = SpeechRecognizerConfig.class)
public interface YandexSpeechRecognizerClient {
@PostMapping
@Headers({
"Content-Type", "audio/ogg"
})
RecognizedTextResponse recognizeText(@RequestHeader("Authorization") String token,
@RequestParam("lang") String lang,
@RequestBody ByteArrayResource oggFileBytes);
Feign 客户端配置:
@Bean
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
@Bean
public Client httpFeignClient() {
return new OkHttpClient(new okhttp3.OkHttpClient.Builder()
.build());
}
@Bean
public Feign.Builder speechFeignBuilder(@Autowired Logger.Level logLevel, @Autowired Client client) {
return Feign.builder()
.logger(new Slf4jLogger(log))
.logLevel(logLevel)
.client(client);
}
测试方法:
byte[] bytes = Files.readAllBytes(oggFile.toPath());
RecognizedTextResponse yandexRecognizedTextResponse = underTest.recognizeText(
"Bearer " + authClient.getToken().getAccessToken(),
"en-EN",
false,
false,
"123123123",
new ByteArrayResource(bytes)
);
已经尝试过 gagravarr vorbis、@Value 注入、MultipartFile。没有任何作用
@Header
注释似乎没有按预期工作。您可以尝试以这种方式注入静态标头:
@PostMapping(headers = "content-type=audio/ogg")
// or
@PostMapping(produces = "audio/ogg")