PUT请求表单主体在RESTLet和HTTPClient中

时间:2014-02-28 11:14:54

标签: java jax-rs httpclient restlet apache-httpclient-4.x

我在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 ...

1 个答案:

答案 0 :(得分:0)

为什么使用多部分编码传输单个参数?除了它的外观,服务实际上期望'form-urlencoded'内容。很可能以这种方式构建的请求应该足够了

HttpUriRequest put = RequestBuilder.put()
        .setUri("http://localhost:1337/api/user/default/inventory")
        .addParameter("url", item)
        .build();