我从Android客户端获取多部分实体,如下所示。
HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost(
"http://localhost:9090/MBC_WS/rest/network/mobileUserPictureInsert1");
MultipartEntity reqEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("message", new StringBody("hi moni"));
postRequest.setEntity(reqEntity);
HttpResponse response = httpClient.execute(postRequest);
在球衣中,我试图检索消息,但只获取对象。代码是:
@Path("/mobileUserPictureInsert1")
@POST
@Consumes("multipart/*")
public String create(MultiPart multiPart){
BodyPartEntity bpe = (BodyPartEntity) multiPart.getBodyParts().get(0).getEntity();
String message = bpe.toString();
这里我得到一些对象而不是消息值。我犯了什么错误。帮助我。
答案 0 :(得分:1)
是的,正确的结果。 toString()
只会使用Object.toString()
,这将导致
getClass().getName() + '@' + Integer.toHexString(hashCode())
这很可能是你所看到的。除非BodyEntityPart
覆盖toString()
,否则InputStream
覆盖InputStream
。您应该使用BodyEntityPart.getInputStream()
获取@POST
@Consumes("multipart/*")
public String create(MultiPart multiPart) throws Exception {
String message;
try (BodyPartEntity bpe
= (BodyPartEntity) multiPart.getBodyParts().get(0).getEntity()) {
message = getString(bpe.getInputStream());
}
return message;
}
private String getString(InputStream is) throws Exception {
StringBuilder builder = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(is))) {
String line;
while((line = reader.readLine()) != null) {
builder.append(line).append("\n");
}
}
return builder.toString();
}
。那么你可以对@POST
@Consumes("multipart/*")
public String create(@FormDataParam("message") String message){
return message;
}
做任何事情。
一个简单的例子:
@FormDataParam("message")
另一个注意事项:您已经在使用Jersey多部分支持,您可以让生活更轻松,只需使用其注释支持。例如,你可以做到
reqEntity.addPart("message", new StringBody("hi moni"));
这更容易。 {{1}}获取您在此处定义的正文名称:
{{1}}
并转换为String。只要MessageBodyReader可用于正文部分的Content-Type,它就应该能够自动转换。