I’m trying to send audio OGG file bytes via feign client in java to the API endpoint, but I’ve got an 400 bad request → “error_message” : “OGG header has not been found”. But if file was sending from postman (with same headers and OGG file) everything works just fine.
FeignClient:
@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 client config:
@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);
}
Test method:
byte[] bytes = Files.readAllBytes(oggFile.toPath());
RecognizedTextResponse yandexRecognizedTextResponse = underTest.recognizeText(
"Bearer " + authClient.getToken().getAccessToken(),
"en-EN",
false,
false,
"123123123",
new ByteArrayResource(bytes)
);
Already tried gagravarr vorbis, injection with @Value, MultipartFile. Nothing works