У меня есть клиент RESTEasy (3.6.2.Final) с прокси-интерфейсом, в котором я хочу вызвать WS для загрузки файла. Вызов работает нормально, если я определяю исправление Content-Type, но не работает, если я хочу установить его самостоятельно.
Интерфейс:
@POST
@Path("api/files/upload/")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes()
FileUploadResponse uploadFile(byte[] file);
При создании экземпляра прокси я предоставляю Basi c Аутентификация:
ResteasyClient client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target(UriBuilder.fromPath("http://..."));
target.register(new BasicAuthentication("username", "password"));
ApiInterface api = target.proxy(ApiInterface.class);
Как этот вызов работает, но Content-Type в заголовке является общим c * / *
Если я добавлю HeaderParam, как это , вызов не выполняется с HTTP 400 (неверный запрос):
@POST
@Path("api/files/upload/")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes()
FileUploadResponse uploadFile(byte[] file, @HeaderParam("Content-Type") String contentType);
Я проверил HTTP-вызов, и Content-Type появляется дважды: один раз как * / *, а другой как «application / pdf» ( тот, который я предоставляю при вызове uploadFile).
Я думал, что могу удалить @Consumes (), так как сам устанавливаю заголовок, но затем я получаю другую ошибку:
java.lang.RuntimeException: RESTEASY004590: You must define a @Consumes type on your client method or interface, or supply a default
Content-Type будет отличаться при каждом моем вызове в зависимости от отправляемого документа. Разве в RESTEasy нет способа определить его как параметр?