У меня проблемы с повторной формой и составными формами, и я надеялся, что кто-то может столкнуться с той же проблемой или иначе сможет мне помочь.
Моя цель - загрузить файл и некоторые параметры одновременно. Я попробовал это, используя @MultipartForm, аннотированный к POJO-форме:
@PUT
@Path("/userdebug1/{userId}")
@Consumes("multipart/form-data")
@Produces("application/json;charset=UTF-8")
public String updateUserDebug1( @MultipartForm UserRequestForm request )
{
return request.getName();
}
С формой UserRequestForm:
public class UserRequestForm
{
@FormParam("name")
String name;
@FormParam("blob")
@PartType("application/octet-stream")
byte[] image;
public String getName()
{
return name;
}
public void setName(String n)
{
this.name =n;
}
public byte[] getImage()
{
return image;
}
public void setImage(byte[] image)
{
this.image = image;
}
}
Это все работает хорошо, за исключением того факта, что кодировка символов нарушена . Если я использую умлаут, он не возвращается должным образом. Принимая во внимание, что если я использую следующий метод:
@PUT
@Path("/userdebug2/{userId}")
@Consumes("multipart/form-data")
@Produces("application/json;charset=UTF-8")
public String updateUserDebug2(MultipartFormDataInput form)
{
try {
return form.getFormDataMap().get("name").get(0).getBodyAsString();
} catch (IOException e) {
e.printStackTrace();
}
return "error";
}
Я использовал charlesproxy для отправки одного и того же запроса двумя обоими URL. Вот один из них. Другой отличается только URL.
PUT /api/v1/userdebug1/A4BE364C-15F8-59B0-87C3-DCA0A123644A HTTP/1.1
Host: localhost:8081
Content-Type: multipart/form-data; charset=utf-8; boundary=0xKhTmLbOuNdArY-5C999EAA-3828-4919-98B7-19D4FD738814
Accept-Encoding: gzip
Connection: close
Content-Length: 205
--0xKhTmLbOuNdArY-5C999EAA-3828-4919-98B7-19D4FD738814
Content-Disposition: form-data; name="name"
Content-Type: text/plain;charset=utf-8
ü
--0xKhTmLbOuNdArY-5C999EAA-3828-4919-98B7-19D4FD738814--
Ответ 1 (с использованием формы pojo):
�
Ответ 2 (с использованием MultipartFormDataInput):
ü
Есть идеи? Я что-то не так делаю или это ошибка?
Заранее благодарим огромное сообщество stackoverflow. Вы уже оказали большую помощь. Даже если я впервые задаю вопрос.