我在Apache HTTPClient和在RESTLet上运行的JAX-RS服务之间传输表单主体时遇到了很多困难。
以下是我发送PUT请求的方法:
HttpPut put = new HttpPut("http://localhost:1337/api/user/default/inventory");
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addTextBody("url", item, ContentType.MULTIPART_FORM_DATA);
put.setEntity(builder.build());
HttpResponse resp = httpClient.execute(put);
我的服务看起来像这样:
@PUT
@Produces("application/json")
@Path("user/{id}/inventory")
Public Response addResourceToProfile(@FormParam("url") String url, @PathParam(value="id") String userId, @Context HttpHeaders headers){
try {
UserProfiles.get(userId).addToInventory(url);
return Response.ok("{result:\"success\"}", MediaType.APPLICATION_JSON_TYPE).build();
} catch (Exception e) {
return Response.serverError().build();
}
}
url参数总是最终 null ...
答案 0 :(得分:0)
为什么使用多部分编码传输单个参数?除了它的外观,服务实际上期望'form-urlencoded'内容。很可能以这种方式构建的请求应该足够了
HttpUriRequest put = RequestBuilder.put()
.setUri("http://localhost:1337/api/user/default/inventory")
.addParameter("url", item)
.build();