我正在尝试使用 Quarkus 上的 RestEasy 将文档发送到远程 API。
我调用的 API 要求我发送包含 3 个文件的
multipart/form-data
主体。问题是,API 关心它们指定的顺序,如果它们的顺序错误,将会返回错误。
这个问题看起来与这个问题类似,但是那里的问题涉及服务器返回数据,而我的问题涉及客户端发送数据。无论如何,我发表了一条评论,如果出现解决问题,我会删除这个问题。
这些参数称为
PARAMETERS
、INDEX
和 DATA
,需要按此确切顺序指定并有意大写。我正在使用 MultipartFormDataOutput 来存储要发送的文件,正如另一个问题所暗示的那样,这可能是按字母顺序排序的键的问题。
这是我正在使用的服务接口:
@ApplicationScoped
@RegisterRestClient(configKey = "api-url")
public interface DocuService {
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Path("/send_document")
String sendDocument(
@MultipartForm MultipartFormDataOutput data
);
}
这就是我将文件添加到有效负载并发送它的方式:
MultipartFormDataOutput mpFormData = new MultipartFormDataOutput();
mpFormData.addFormData("PARAMETERS", requestData.getParamFile(), new MediaType("application", "xml"), "parametersFile.xml");
mpFormData.addFormData("INDEX", requestData.getIndexFile(), new MediaType("application", "xml"), "indexFile.xml");
mpFormData.addFormData("DATA", requestData.getDataFile(), new MediaType("application", "json"), "dataFile.json");
docuService.sendDocument(
mpFormData
);
我找不到指定按键顺序的方法,或者可能找不到允许我这样做的类似对象。也许有人可以帮助我阐明这一点。
提前致谢,祝您有美好的一天! 😉
不幸的是没有足够的代表添加到评论线程,所以将使用答案。
我使用了扩展 MultipartFormDataOutput 并使用链接哈希图的方法。不幸的是,在resteasy 3.x中,MultipartFormDataOutput被定为最终版本,因此该解决方法不再有效,因此,如果这是您的解决方案,请注意这一点。
目前我还不知道有什么替代品。