java.lang.IllegalStateException: имя пустое при настройке параметров тела - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть следующий пример запроса POST к какой-либо системе.

Запрос выглядит так:

enter image description here

Iя пытался реализовать его следующим методом:

/**
     * This method creates a HTTP POST/PUT/PATCH request and fills body
     * with data from Map
     * @param urlToPrepareRequest URL for a request
     * @param keyValueToPutInBodyRequest Map of entities to put in body request
     * @param httpMethod HTTP method (POST, PUT, PATCH are available)
     * @throws IllegalArgumentException if httpMethod is wrong
     * @return ready HTTP POST/PUT/PATCH with filled body
    */
    public static HttpEntityEnclosingRequestBase createHttpRequestAndFillBody(String urlToPrepareRequest, Map<String, Object> keyValueToPutInBodyRequest, String httpMethod) 
{
    HttpEntityEnclosingRequestBase httpRequest;

    if (httpMethod.equals("POST")) 
    {
        httpRequest = new HttpPost(urlToPrepareRequest);
    }
    else if (httpMethod.equals("PUT")) 
    {
        httpRequest = new HttpPut(urlToPrepareRequest);
    }
    else if (httpMethod.equals("PATCH")) 
    {
        httpRequest = new HttpPatch(urlToPrepareRequest);
    }
    else throw new IllegalArgumentException("HTTP method can't be used " + httpMethod + " available values are \"POST\", \"PUT\", \"PATCH\"");

    Iterator it = keyValueToPutInBodyRequest.entrySet().iterator();

    MultipartEntityBuilder builder = MultipartEntityBuilder.create();

    while (it.hasNext()) 
    {   
        Map.Entry pair = (Map.Entry)it.next();

        String keyOfBodyToPut = (String) pair.getKey();
        Object valueOfBodyToPut = pair.getValue();

        if(!(valueOfBodyToPut instanceof byte[])) 
        {
            builder.addTextBody(keyOfBodyToPut, valueOfBodyToPut.toString());
        }
        else 
        {
            builder.addBinaryBody(keyOfBodyToPut, (byte[]) valueOfBodyToPut);
        }
    } 

    HttpEntity entity = builder.build();
    httpRequest.setEntity(entity);

    return httpRequest;
}

Однако я получаю следующее исключение:

Exception in thread "main" java.lang.IllegalStateException: Name is blank
    at org.apache.http.util.Asserts.notBlank(Asserts.java:64)
    at org.apache.http.entity.mime.FormBodyPartBuilder.build(FormBodyPartBuilder.java:96)
    at org.apache.http.entity.mime.MultipartEntityBuilder.addPart(MultipartEntityBuilder.java:148)
    at org.apache.http.entity.mime.MultipartEntityBuilder.addBinaryBody(MultipartEntityBuilder.java:163)
    at org.apache.http.entity.mime.MultipartEntityBuilder.addBinaryBody(MultipartEntityBuilder.java:168)

Это все потому, что внутри карты есть следующий код:

bodyParams.put("", currentChunk);

currentChunk относится к типу byte []. Сначала я думал, что можно вставить пустой ключ внутри запроса тела (потому что на экране выше нет ключа), но теперь это заставило меня подумать, что, возможно, это не так.

В чем проблема?

И как мне сделать мой метод более подходящим для запроса почтальона?

Заранее спасибо.

...