当前位置: 首页 > 知识库问答 >
问题:

在 Android 客户端中处理来自 Jersey 服务器的多部分响应

姬康平
2023-03-14

我成功地从Android向Jersey服务器发送了多部分消息,如下所示:

File file = new File(imagePath);
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(url);
    FileBody fileContent = new FileBody(file);
    MultipartEntity multipart = new MultipartEntity();
    multipart.addPart("file", fileContent);

    try {
        multipart.addPart("string1", new StringBody(newProductObjectJSON));
        multipart.addPart("string2", new StringBody(vitaminListJSON));
        multipart.addPart("string3", new StringBody(mineralListJSON));
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    httppost.setEntity(multipart);
    HttpResponse response = null;
    response = httpclient.execute(httppost);
    String statusCode = String.valueOf(response.getStatusLine().getStatusCode());
    Log.w("Status Code", statusCode);
    HttpEntity resEntity = response.getEntity();

    Log.w("Result", EntityUtils.toString(resEntity));

这工作正常,但问题是当我需要使用GET从服务器接收多部分响应时。服务器还需要将一个图像和三个字符串作为多部分消息发送给我。我不知道如何处理:

HttpResponse response = null;
    HttpClient httpclient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet(url);
    try {
        response = httpclient.execute(httpget);
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    HttpEntity resEntity = response.getEntity();
    Log.w("Result", EntityUtils.toString(resEntity));

我不确定如何从实体中提取值。如何从响应中获取该文件和字符串值?我知道如何处理像普通字符串或JSON这样的简单响应,但是多部分响应困扰着我。任何建议都会很有帮助。谢谢。

共有1个答案

颜君浩
2023-03-14

没有在客户端消费多部分内容的标准方法,JAX-RS规范主要关注服务器/资源端。不过,归根结底,与JAX-RSendpoint的通信与与常规HTTP服务器的通信非常相似,因此任何现有的处理多方HTTP响应的方法都可以工作。在Java客户端世界中,使用像mime4j这样的第三方库来处理多部分响应是很常见的,但是使用Jersey实际上有一种更简单的方法。该解决方案依赖于JavaMail API(可通过Maven和其他资源访问):

final ClientConfig config = new DefaultClientConfig();
config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
        Boolean.TRUE);
final Client client = Client.create(config);

final WebResource resource = client
        .resource(URL_HERE);
final MimeMultipart response = resource.get(MimeMultipart.class);

// This will iterate the individual parts of the multipart response
for (int i = 0; i < response.getCount(); i++) {
    final BodyPart part = response.getBodyPart(i);
    System.out.printf(
            "Embedded Body Part [Mime Type: %s, Length: %s]\n",
            part.getContentType(), part.getSize());
}

检索后,您可以根据客户机代码处理各个身体部位。

 类似资料:
  • 问题内容: 使用Go中的软件包,实际上是否可以从服务器向客户端进行RPC调用?如果没有,是否有更好的解决方案? 问题答案: 我目前正在使用Thrift(thrift4go)来实现服务器->客户端和客户端->服务器RPC功能。默认情况下,thrift仅像net / rpc一样执行客户端->服务器调用。由于还需要服务器与客户机之间的通信,因此我进行了一些研究并发现了bidi- thrift 。Bidi

  • 我尝试使用Java中的Sockets连接到多个客户端。一切似乎都正常,但问题是,服务器只监听第一个客户端。如果有多个客户端,服务器可以向它们发送所有消息,但他可以只监听来自第一个客户端的消息。我尝试了所有这些(我从昨天开始就遇到了这个问题)。所以我很确定,错误一定在“ClientListener”类中。 说明:有一个客户端列表(用于与字符串通信的连接)。在GUI中有一个列表,我可以在其中选择要与哪

  • 问题内容: 我有一个Java控制器,必须向我发送一些文本数据和不同的字节数组。因此,我正在构建n多部分请求,并将其写入到HttpServletResponse的流中。 现在我的问题是如何在客户端解析响应并提取多个部分。 服务器代码片段:- 客户代码片段:- 我检查了CloseableHttpResponse和HttpEntity,但是它们都不提供解析多部分请求的方法。 编辑1:这是我在客户端流中收

  • 我有一个java控制器,它必须向我发送一些文本数据和不同的字节数组。因此,我正在构建一个多部分请求,并将其从HttpServletResponse写入流。 现在我的问题是如何在客户端解析响应并提取多个部分。 服务器代码片段:- 客户端代码段:- 我检查了CloseableHttpResponse和HttpEntity,但它们都没有提供解析多部分请求的方法。 编辑1:这是我在客户端流中收到的示例响应

  • 我是web服务编程新手,我想使用netbeans 6在Grizzly服务器上使用Jersey创建一个restful web服务,然后创建一个客户端javascript,以便通过浏览器使用该web服务。因此,我开始了解更多关于restful web服务的知识,并在网上阅读了大量指南,然后通过阅读jersey用户指南http://jersey . Java . net/nonav/documentat

  • 我试图用Java编写一个客户机来从RESTful web服务中获取数据。我已经看了几个教程和视频,但有一些我不明白。让我从这个开始。我能够使用PEST编写一个clientin PHP来获得成功的响应。这是一个如何发出请求的示例: 我发现有些事情很尴尬,我不太熟悉RESTful客户。出于某种原因,该站点使用POST请求而不是GET请求。凭据作为表单数据和任何查询参数在主体中传递。我查看的教程不是这样