Я вызываю внешний REST API и должен передать файл и параметры в виде данных формы из java кода - PullRequest
0 голосов
/ 27 апреля 2020

Вот код: мне нужно отправить текст как ключ = "опции" и значение = a JSON как объект. Так что в вызове API я отправляю один файл PDF и модель JSON. Но нужно передать его как данные формы, как показано на рисунке ниже. Но он говорит, что отсутствуют данные формы (опции) JSON

{ "extraction": { "headerFields": [ "documentNumber", "taxId", "taxName", "purchaseOrderNumber", "shippingAmount", "netAmount", "senderAddress", "senderName", "grossAmount", "currencyCode", "receiverContact", "documentDate", "taxAmount", "taxRate", "receiverName", "receiverAddress" ], "lineItemFields": [ "description", "netAmount", "quantity", "unitPrice", "materialNumber" ] }, "clientId": "c_00", "documentType": "invoice", "enrichment": { "sender": { "top": 5, "type": "businessEntity", "subtype": "supplier" }, "employee": { "type": "employee" } } } это код, который я использую. Я пытался builder.addPart("options", String_JSON); также.

try {
        CloseableHttpClient client = HttpClientBuilder.create().build();
        String token = tokenGeneration.generateToken(client);
        logger.error("Token :"+token);
        HttpPost httpPost = new HttpPost(ApplicationConstants.DOC_POST_URL);
        httpPost.setHeader("Authorization", "Bearer " + token);
        httpPost.setHeader("Content-Type", "multipart/form-data");
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        File file =emailReader.emailReader();
        if(file.exists()){
            FileBody fileBody = new FileBody(file);
            StringBody stringBody = new StringBody(ApplicationConstants.OPTIONS_BODY,ContentType.MULTIPART_FORM_DATA);
            logger.error(" inside if FileBody fileBody passed");
            builder.addPart("file", fileBody);
            logger.error("  inside if  FileBody fileBody added to builder passed");
        //  builder.addPart("options", stringBody);
            builder.addTextBody("options", ApplicationConstants.OPTIONS_BODY, ContentType.TEXT_PLAIN);
            HttpEntity multipart = builder.build();
            httpPost.setEntity(multipart);
            CloseableHttpResponse response = client.execute(httpPost);
            logger.error("response status code:"+response.getStatusLine().getStatusCode());
            String responseFromECC = ServiceUtil.getDataFromStream(response.getEntity().getContent());
            logger.error("responseFromECC"+responseFromECC.toString());
            logger.error("responseFromECC"+responseFromECC.toString());
            return new JSONObject(responseFromECC);
        }else{
            JSONObject obj = new JSONObject();
            obj.put("Message", "File not added");
            return obj;
        }

    } catch (Exception e) {
        e.printStackTrace();
        JSONObject obj = new JSONObject();
        obj.put("Error", "Exception Block:"+e.getMessage());
        return obj;
    }

и получение ответа:

{"error": {"code": "4", "message": "Required form-data not provided.", "details": [{"code": "0", "message": "options"}]}}

enter image description here

Добавление упомянутого JSON в отмеченное место скриншота.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...