2013-04-28 11 views
12

che sto cercando di fare qualcosa la seguente richiesta di server POST utilizzando MultipartEntity:È possibile avere un MultipartEntities nidificato o FormBodyPart in un POST multipart?

parameters: {"parameter1"=>"parameter1", "parameter2"=>{"sub_parameter1"=>"sub_parameter1", "sub_parameter2"=>"sub_parameter2"}} 

Attualmente sto usando qualcosa come:

multipartEntity.addPart("parameter1", new StringBody("parameter1")); 

FormBodyPart parameter2 = new FormBodyPart("parameter2", new StringBody("")); // It wouldn't allow a null ContentBody 

parameter2.addField("sub_parameter1", "sub_parameter1"); 
parameter2.addField("sub_parameter2", "sub_parameter2"); 

Tuttavia, i campi secondari non portano però. Ho appena ottenere:

parameters: {"parameter1"=>"parameter1", "parameter2"=>""} 

Come si crea una struttura annidata sia nel MultipartEntity o gli elementi in esso contenuti FormBodyPart?

+1

hai finito per trovare una soluzione a questo? Sto avendo lo stesso problema. – scientiffic

+0

Sto cercando qualcosa di simile ma non riesco a farlo funzionare –

risposta

5

una volta che hai visto come le voci del modulo vengono trasferite tramite la connessione HTTP, capirai che è impossibile avere qualcosa nidificato con la richiesta multiforme così come con la richiesta con codifica url.

le cose sono molto semplici. richiesta modulo multipart ha il formato di:

--- content-boundary --- 
Content-Disposition: form-data; name="form_data_name" 

[content (skipped)] 
--- content-boundary --- 

questo è tutto. c'è un flusso di voci di modulo dati singoli nel formato: [nome inserimento modulo] -> [contenuto voce modulo] che si ripete per ogni voce nel modulo. non è ricorsivo, quindi potrebbero non esserci strutture nidificate.

Fonti:

  1. 17.13.4 Form content types
  2. RFC 2045 Internet Message Bodies
+0

È una soluzione davvero carina e, riassume in sostanza che "annidato" non è una parola per Multipart Entity. Grazie! – sud007

2

Considerare l'invio di un json nel corpo della richiesta. In questo modo puoi inviare quello che vuoi.

2

qualcosa di simile:

MultipartEntity reqEntity = new MultipartEntity(); 
reqEntity.addPart("selectedGroup", new StringBody(group)); 
reqEntity.addPart("selectedService", new StringBody(service.toString())); 
reqEntity.addPart("selectedTransformation", new StringBody(transformation.toString())); 
reqEntity.addPart("projectId", new StringBody(projectId.toString())); 

Controllare exapmle 8 di questo legame. Anche exapmple 23 Example Site

Spero che questo ti aiuti con il tuo problema.

0

ho avuto un requisito simile e ho finito per regolare il codice sul mio lato server per rimuovere il parametro 2, al fine di utilizzare MultipartEntity sul lato client. Ha funzionato perfettamente bene.

parameters: {"parameter1"=>"parameter1", "parameter2"=>{"sub_parameter1"=>"sub_parameter1", "sub_parameter2"=>"sub_parameter2"}} 

parameters: {"parameter1"=>"parameter1", "sub_parameter1"=>"sub_parameter1", "sub_parameter2"=>"sub_parameter2"}