Для работы с Service-Now API (например) требуется запрос на предоставление следующего:
POST /api/now/attachment/upload HTTP/1.1
Host: somehost.testenv.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MadHyZrFTrZu0gW
cache-control: no-cache
Content-Disposition: form-data; name="table_name"
some_table
Content-Disposition: form-data; name="table_sys_id"
82c9aca7kljasdfkljhasdfec8dfdb61d961920
Content-Disposition: form-data; name="uploadFile"; filename="undefined"
Content-Type: file
------WebKitFormBoundary7MA4YWxkTrZu0gW—
Выше написано с использованием Postman и предоставлением form-data
пар ключ-значение.
Однако, основываясь на аннотации RFC, которая определяет Content-Disposition: https://tools.ietf.org/html/rfc2183.
Two values for this
header field are described in this memo; one for the ordinary linear
presentation of the body part, and another to facilitate the use of
mail to transfer files.
Класс Content-Disposition, используемый в Spring Webflux (https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/ContentDisposition.html) содержит только внутреннийполе для «filename», которое является строкой.
В классе ContentDisposition в org.springframework.http отсутствует компонент согласно RFC-2183 относительно стандартного значения (обычное линейное представление части тела)?
HTTP-запрос, который автоматически генерируется пружинным кодом, выглядит следующим образом:
POST /api/now/attachment/upload HTTP/1.1
user-agent: ReactorNetty/0.7.9.RELEASE
transfer-encoding: chunked
host: somehost.testenv.com
accept: */*
accept-encoding: gzip
Content-Type: multipart/form-data;boundary=o-0JsSvUdGo98NDHJSWTwjvgzlRSXsmJ98-pWQ;charset=UTF-8
Это исходный код, который генерирует указанный выше HTTP-запрос:
MultipartBodyBuilder mbuilder = new MultipartBodyBuilder();
mbuilder.part("table_name", snConfig.getChangeRecordTableName());
mbuilder.part("table_sys_id", result.get(0).getSysId());
mbuilder.part("uploadFile", someFile);
return client.post()
.uri(snConfig.getEndpointAttachmentUpload())
.contentType(MediaType.MULTIPART_FORM_DATA)
.syncBody(mbuilder.build())
.retrieve()
.bodyToMono(AttachmentUploadResult.class);
Itпохоже, что код хранит все компоненты MultipartBodyBuilder в одной multipart / form-data, который отличается от формата рабочего запроса HTTP.
Однако, даже вручную предоставляя заголовки Content-Disposition, можно создать только пару имя / значение, где значением является «имя файла».
Отсутствует ли Content-Disposition в функциональности?Возможно ли это с WebClient?