我正在尝试创建一个包含需要POST
的multipart-form-data
的NT Credentials
请求。身份验证请求导致POST
重新发送,并且我收到了不可重复的实体异常。
我试过包装用MultipartContent
生成的BufferedHttpEntity
实体,但是会抛出NullPointerExceptions
吗?
final GenericUrl sau = new GenericUrl(baseURI.resolve("Record"));
final MultipartContent c = new MultipartContent().setMediaType(MULTIPART_FORM_DATA).setBoundary("__END_OF_PART__");
final MultipartContent.Part p0 = new MultipartContent.Part(new HttpHeaders().set("Content-Disposition", format("form-data; name=\"%s\"", "RecordRecordType")), ByteArrayContent.fromString(null, "C_APP_BOX"));
final MultipartContent.Part p1 = new MultipartContent.Part(new HttpHeaders().set("Content-Disposition", format("form-data; name=\"%s\"", "RecordTitle")), ByteArrayContent.fromString(null, "JAVA_TEST"));
c.addPart(p0);
c.addPart(p1);
ByteArrayContent
的文档说使所有零件具有可重复性并不能解决问题。因为这段代码
System.out.println("c.retrySupported() = " + c.retrySupported());
输出c.retrySupported() = true
。我找到了以下文档:
现在,我已经通过提取字符串内容将
MultipartContent
转换为ByteArrayContent
媒体类型的multi/part-form
,但仍然遇到相同的错误!但是当我尝试调用
request.execute()
时,仍然出现以下异常。Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity.
那么,如何说服
ApacheHttpTransport
创建可重复的实体呢? 最佳答案
我必须修改从HttpContent
继承的所有类,以便它们可以使用.retrySupported()
正确地进行报告,以便在输入ApacheHttpTransport
代码时可以正确创建可重复的内容。
更改是针对1.20.0
版本进行的,因为这就是我使用的版本。我希望针对dev
分支HEAD
提交拉取请求,因此,希望该版本或该版本的某个版本能够进入下一个版本。
Here are the modifications that need to be merged in.