Проблемы с вызовом многочастного REST-сервиса - PullRequest
0 голосов
/ 24 октября 2019

В моем проекте у меня есть многокомпонентная служба отдыха (на основе 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 работать?

...