Java jersey客户端内容处理中字段的特定顺序

Java jersey客户端内容处理中字段的特定顺序,java,jax-rs,multipart,content-disposition,jersey-client,Java,Jax Rs,Multipart,Content Disposition,Jersey Client,我正在使用jersey客户端发送包含多部分/表单数据的post请求。第三方服务器使用非常旧的com.oreilly.servlet.multipart(COS)版本来解析它,这里的问题是。简而言之:如果文件名字段位于名称字段之前,则无法解析该字段。 因此,它导致无法使用jersey客户端发送文件部分,因为它将名称字段放在内容处置的末尾(我真的相信这没关系,因为根据RFC,内容处置中字段的顺序应该无关紧要),文件名未被解析,没有文件名,此第三方服务器无法将此部分识别为文件。 问题是:如何设置Fil

我正在使用jersey客户端发送包含多部分/表单数据的post请求。第三方服务器使用非常旧的com.oreilly.servlet.multipart(COS)版本来解析它,这里的问题是。简而言之:如果文件名字段位于名称字段之前,则无法解析该字段。
因此,它导致无法使用jersey客户端发送文件部分,因为它将名称字段放在内容处置的末尾(我真的相信这没关系,因为根据RFC,内容处置中字段的顺序应该无关紧要),文件名未被解析,没有文件名,此第三方服务器无法将此部分识别为文件。

问题是:如何设置FileDataCodePart的内容配置保存字段的顺序?

我检查了FormDataContentDisposition类的源代码,发现它以一定的顺序构造内容配置

StringBuilder sb = new StringBuilder();
sb.append(type);
addStringParameter(sb, "filename", fileName);
addDateParameter(sb, "creation-date", creationDate);
addDateParameter(sb, "modification-date", modificationDate);
addDateParameter(sb, "read-date", readDate);
addLongParameter(sb, "size", size);
return sb;

因此,此问题的解决方法是从此类扩展并重写此方法。

以下代码显示了一种解决方法:

    StreamDataBodyPart filePart = new StreamDataBodyPart("File.docx", is) {
        @Override
        protected FormDataContentDisposition buildContentDisposition() {
            FormDataContentDisposition contentDisposition = new FormDataContentDisposition("form-data", getName(), getName(), null, null, null, 0) {
                @Override
                protected StringBuilder toStringBuffer() {
                    StringBuilder sb = new StringBuilder();
                    sb.append(this.getType());
                    addStringParameter(sb, "name", getName());
                    addStringParameter(sb, "filename", getName());
                    return sb;
                }
            };
            return contentDisposition;
        }
    };