我遇到了resteasy和multipart表单的问题,我希望有人可能会遇到同样的问题或者能够帮助我。使用pojo的Resteasy多部分/表单数据编码
我的目标是同时上传文件和一些参数。我试图用这个注释的POJO表格的@MultipartForm:
@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不同。
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):
ü
任何想法?我做错了什么或者这是一个错误?
预先感谢您真棒的计算器。你已经有了很大的帮助。即使这是我第一次问一个问题。
我已经升级到2.3.5.Final并在那里固定。 – bert 2012-12-03 19:00:15