2014-02-28 41 views
1

在Apache HTTPClient和在RESTLet上運行的JAX-RS服務之間傳輸表單主體時,我很掙扎。PUT在RESTLet和HTTPClient中請求表單主體

這就是我做派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參數八方通最終被 ...

回答

0

爲什麼使用多部分編碼傳輸單獨的參數?除了它的外觀,服務實際上預計'形式urlencoded'的內容。最有可能以這種方式構建的請求應該足夠了

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

因爲我最終會在稍後添加更多參數。而且因爲我需要模擬基於JavaScript的應用程序將發佈的任何內容,儘可能少的解析開銷。 – Michael

+0

@Michael:沒有什麼能阻止你在表單urlencoded請求中擁有更多參數。最有可能來自url編碼是你的Java腳本無論如何使用。如果你確定你需要多部分編碼,那麼你的服務是錯誤的 – oleg