@FormDataParam
si suppone per essere utilizzato con i dati di tipo multipart (cioè multipart/form-data
o MediaType.MULTIPART_FORM_DATA
), che nella sua forma grezza sembra qualcosa di simile
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="submit-name"
Larry
--AaB03x
Content-Disposition: form-data; name="files"; filename="file1.txt"
Content-Type: text/plain
... contents of file1.txt ...
--AaB03x--
multipart è utilizzato principalmente per l'invio di dati binari, come non file di testo.
@FormParam
e per parametri di richiesta URL (cioè application/x-www-form-urlencoded
o MediaType.APPLICATION_FORM_URLENCODED
), che in forma grezza assomiglia
param1=value1¶m2=value2
Entrambi questi tipi sono utilizzati principalmente in forme lato client. Ad esempio
<form method="POST" action="someUrl">
<input name="gender" type="text">
<input name="name" type="text">
</form>
sopra invierebbe i parametri di richiesta come application/x-www-form-urlencoded
. Sarebbe vengono inviati in forma grezza come
gender=male&name=peeskillet
Sul lato server, possiamo usare una @FormParam
per ogni parametro denominato in forma
@FormParam("gender") String gender, @FormParam("name") String name
Ma se abbiamo bisogno di inviare dire un'immagine insieme i parametri, il tipo di dati application/x-form-url-encoded
non è sufficiente, in quanto riguarda solo il testo ASCII. Quindi abbiamo bisogno di usare Multipart
<form method="POST" action="someUrl", enctype="multipart/form-data">
<input name="gender" type="text">
<input name="name" type="text">
<input name="avatar" type="file">
</form>
Qui il tipo multipart è specificato, ora il browser invierà la richiesta con qualcosa come
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="gender"
Male
--AaB03x
Content-Disposition: form-data; name="name"
Peskillet
--AaB03x
Content-Disposition: form-data; name="avatar"; filename="image.png"
Content-Type: image/png
... binary content of image file ...
--AaB03x--
Sul server, simile con l'esempio application/x-www-form-urlencoded
sopra, per ciascun parametro Multipart (o campo per essere più precisi), possiamo usare @FormDataParam
per indicare ogni parametro
@FormDataParam("gender") String gender,
@FormDataParam("name") String name,
@FormDataParam("avatar") InputStream avatar
Vedi anche:
FormDataParam viene utilizzato in combinazione con multipart/form-data. Questo è un metodo più efficiente per trasferire dati binari come allegati piuttosto che usare FormParam. Si prega di consultare la documentazione di [FormDataParam] (https://jersey.java.net/nonav/apidocs/1.0.3/contribs/jersey-multipart/com/sun/jersey/multipart/FormDataParam.html) –