java - java.lang.IllegalStateException:设置正文参数时名称为空
问题描述
我有以下对某个系统的 POST 请求的示例。
请求如下所示:
我尝试使用以下方法实现它:
/**
* 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 []
。起初,我认为可以在正文请求中放置一个空键(因为在上面的屏幕上没有键),但现在它让我觉得可能不是。
有什么问题?
以及如何使我的方法更符合邮递员的要求?
提前致谢。
解决方案
推荐阅读
- javascript - 未捕获的类型错误:在为 matter.js 编写 Kotlin Wrapper 时无法读取未定义的属性“创建”
- javascript - 如何有效地填充 MongoDB 数据库以进行 e2e 测试
- python - 尝试解析 JSON 站点时出现 JSONDecodeError
- rust - 生命周期必须对静态生命周期有效
- sql-server - 如何从日期计算中删除非工作日?
- javascript - 比较 REST 响应并为 JET 中的新记录创建新的自动生成 ID
- sql - 如何在 Microsoft SQL Server 中将每个存储过程的脚本生成为单独的 .SQL 文件?
- google-tag-manager - 如何在 GTM 变量模板中使用另一个变量的值?
- javascript - 使用多种版本格式时的案例
- maven - How can I set Jenkins configuration from config-file-provider plugin in every job (per default)