gpt4 book ai didi

java - 调用 RESTEasy 客户端代理接口(interface),如何指定端点将使用哪种内容类型?

转载 作者:行者123 更新时间:2023-11-30 03:24:51 24 4
gpt4 key购买 nike

我想通过二进制文件 PUT 到可以使用多种可能的 mimetype 之一的端点。具体来说,我正在与 Apache Tika 服务器通信,该服务器可以接收 PDF 或 Word .docx 文件。

我已经设置了一个客户端代理接口(interface),我可以对其进行硬编码,例如 .docx mimetype:

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"})

但它似乎没有选择正确的文件,而且我不知道如何告诉它有问题的文件是哪个。

最佳答案

正如您已经提到的,您可以添加多个 MediaType。如果服务器接受不止一种 MediaType,他必须与客户端协商应使用哪一种。客户端应发送 Content-Type header ,例如 Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document

要使用代理框架添加 Content-Type header ,您必须选择:

  • @HeaderParam("Content-Type") 作为参数添加到 putBasic 方法中。
  • 注册一个 ClientRequestFilter 来设置此 header 。

我不知道为什么,但是对于代理框架,这对我不起作用。如果您使用标准客户端方式,它就可以工作:

client.target(url)
.request()
.put(Entity.entity(binaryFileData,
MediaType.valueOf("application/vnd.openxmlformats-officedocument.wordprocessingml.document")));

服务器现在应该选择您正在使用的 MediaType。

关于java - 调用 RESTEasy 客户端代理接口(interface),如何指定端点将使用哪种内容类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30491442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com