我想通過二進制方式將PUT放到可以使用許多可能的mimetypes中的一個的端點上。具體來說,我正在與Apache Tika服務器進行通信,這可能需要採用PDF或Word .docx文件。調用RESTEasy客戶端代理接口時,如何指定端點將使用哪種內容類型?
我已經成立了一個客戶端代理接口,我可以硬編碼,也就是說,.DOCX MIME類型:
public interface TikaClient {
@PUT
@Path("tika")
@Consumes("application/vnd.openxmlformats-officedocument.wordprocessingml.document")
Response putBasic(byte[] body);
}
,這將工作時,我把它稱爲:
ResteasyClient client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target(url);
TikaClient tikaClient = target.proxy(TikaClient.
Response response = tikaClient.putBasic(binaryFileData);
..但是該端點也可以採用「text/plain」或「application/pdf」。
我相信我可以指定多個@Consumes選項:@Consumes({"text/plain", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"})
但它似乎並沒有選擇一個正確的,我不知道該怎麼告訴它哪一個有問題的文件。
確實!這對我的工作!我對Java有點新鮮感,所以我對兩件事情有些困惑:(1)我們如何/爲什麼要將註釋(@HeaderParam)傳遞到putBasic方法中;(2)當您說註冊「ClientRequestFilter」 ,你的意思是基本上寫一個實現ClientRequestFilter的類,對吧? [一個這個職位](http://stackoverflow.com/questions/21763700/how-to-set-http-header-in-resteasy-3-0-client-framework-with-resteasyclientbuil)?你知道解釋問題(a)期間發生的事情的文件嗎? – Offlein
正確。 'ClientRequestFilter'在鏈接的文章中描述。使用'@ HeaderParam'會改變你的方法簽名,如下所示:'響應putBasic(@HeaderParam(「Content-Type」)字符串contentType,byte [] body)'。 – lefloh
謝謝你的幫助! – Offlein