В моем проекте у меня есть многокомпонентная служба отдыха (на основе Spring):
@PostMapping(path = "/myservice", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
public Message service(@RequestPart("request") Message in, @RequestPart("files") MultipartFile[] multipartFiles) {
...
}
и клиент (на основе Apache HttpClient):
...
String myJsonRequest = ...;
MultipartEntityBuilder builder = MultipartEntityBuilder.create()
.setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
.addTextBody("request", myJsonRequest, ContentType.APPLICATION_JSON);
for (Entry<String,InputStream> stream : streams.entrySet()) {
builder.addBinaryBody("files", stream.getValue(), ContentType.MULTIPART_FORM_DATA, stream.getKey());
}
String myServiceURI = ...;
httpPost = new HttpPost(myServiceURI);
httpPost.setEntity(builder.build());
...
К сожалению, однако, этот типвызова вызывает следующее исключение:
org.springframework.web.HttpMediaTypeNotSupportedException: тип содержимого 'application / octet-stream' не поддерживается
Я знаю, что при изменении этогоспособ работы службы:
@PostMapping(path = "/myservice", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
public Message service(@RequestPart("request") String in, @RequestPart("files") MultipartFile[] multipartFiles) {
// ...serialize json in ...
}
, но для меня важно сохранить сигнатуру метода такой, какая она есть.
Я также попытался с Почтальоном, в этом случае успешно: Заголовок: -KEY: Content-Type VALUE: application / octet-stream Тело: - KEY: файлы VALUE: myFile1.txt - KEY: запрос VALUE: myRequest.json - KEY: файлы VALUE: myFile2.txt
(файлывсе на моем ПК)
Итак, вопрос: как мне заставить мой клиент на основе Apache HTTPClient работать?