У меня есть следующий пример запроса POST к какой-либо системе.
Запрос выглядит так:
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 []
. Сначала я думал, что можно вставить пустой ключ внутри запроса тела (потому что на экране выше нет ключа), но теперь это заставило меня подумать, что, возможно, это не так.
В чем проблема?
И как мне сделать мой метод более подходящим для запроса почтальона?
Заранее спасибо.