如何从 Jersey Web 服务中的 android 读取多部分实体

how to read multipart entity from android in jersey web service

我正在从 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);

在泽西,我正在尝试检索消息但只收到 object.the 代码是:

 @Path("/mobileUserPictureInsert1")
 @POST
 @Consumes("multipart/*")

public String create(MultiPart multiPart){
     BodyPartEntity bpe = (BodyPartEntity) multiPart.getBodyParts().get(0).getEntity();
     String message = bpe.toString();

我在这里得到了一些对象,而不是消息值。我有什么错误 made.pl 帮帮我

是的,正确的结果。 toString() 将只使用 Object.toString(),这将导致

 getClass().getName() + '@' + Integer.toHexString(hashCode())

这很可能就是您所看到的。除非BodyEntityPart overrides the toString(), which it doesn't. You should instead be getting the InputStream with BodyEntityPart.getInputStream()。然后你可以用 InputStream 做任何事情。

一个简单的例子:

@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();
} 

另一个注意事项:您已经在使用 Jersey 多部分支持,您可以让生活更轻松,只需使用它的注释支持。例如,你可以做

@POST
@Consumes("multipart/*")
public String create(@FormDataParam("message") String message){
    return message;
}

这样就容易多了。 @FormDataParam("message") 获取您在此处定义的正文名称:

reqEntity.addPart("message", new StringBody("hi moni"));

并转换为字符串。只要正文部分的 Content-Type 有可用的 MessageBodyReader,就应该能够自动转换。