Ответ 1
-
@FormDataParam
предполагается использовать с данными типа Multipart (т.е.multipart/form-data
илиMediaType.MULTIPART_FORM_DATA
), которые в исходном виде выглядят примерно так: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 в основном используется для отправки двоичных данных, таких как нетекстовые файлы.
-
@FormParam
для параметров запроса в кодировке URL (то естьapplication/x-www-form-urlencoded
илиMediaType.APPLICATION_FORM_URLENCODED
), который в необработанном виде выглядитparam1=value1¶m2=value2
Оба эти типа в основном используются в формах на стороне клиента. Например
<form method="POST" action="someUrl">
<input name="gender" type="text">
<input name="name" type="text">
</form>
Приведенное выше будет отправлять параметры запроса в виде application/x-www-form-urlencoded
. Это будет отправлено в сыром виде, как
gender=male&name=peeskillet
На стороне сервера мы можем использовать @FormParam
для каждого именованного параметра в форме
@FormParam("gender") String gender, @FormParam("name") String name
Но если нам нужно отправить, скажем, изображение вместе с параметрами, тип данных application/x-form-url-encoded
недостаточен, поскольку он имеет дело только с текстом. Поэтому нам нужно использовать 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>
Здесь указан тип Multipart, теперь браузер отправит запрос с чем-то вроде
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--
На сервере, аналогично приведенному выше примеру application/x-www-form-urlencoded
, для каждого параметра Multipart (или поля, если быть более точным) мы можем использовать @FormDataParam
для обозначения каждого параметра
@FormDataParam("gender") String gender,
@FormDataParam("name") String name,
@FormDataParam("avatar") InputStream avatar
Смотрите также: