如何在泽西网络服务中从android中读取多部分实体

时间:2015-01-05 11:48:04

标签: java android jersey jersey-2.0

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

这里我得到一些对象而不是消息值。我犯了什么错误。帮助我。

1 个答案:

答案 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,它就应该能够自动转换。